我是 Linuxverse 的新手,所以如果我问的是标准问题,请理解。
我刚刚使用此链接下载了一个 zip 文件:https://io.genesis-ark.club/common/20240401/三国名将录(2).zip
我第一次使用下载时,下载完成后,wget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip"
我得到了,所以我只是使用重新下载。但是当我想提取 zip 时,我得到了像这样的奇怪输出???????.zip
wget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip" -O mydownload.zip
所以我试图找到如何获取详细信息的zip文件,我在谷歌搜索时找到了它zipinfo mydownload.zip
,并且输出对我来说也很奇怪
是否有可能是使用非标准程序(如 rar、zip、7z)压缩造成的?我该如何修复它?我已经尝试过使用unzip -a
7zip 但它们都不起作用。
仅供参考:我使用的是 Centos 7.0
根据评论的附加信息:
输出locale charmap
:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ANSI_X3.4-1968
输出locale
:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
答案1
您的语言环境中的字符编码是ANSI_X3.4-1968
ASCII 的另一个名称,该字符集只有 128 个不同的字符,美式(A
ASCII 和 ANSI)英语字符。
它没有任何中国特色。
您之所以进入这样的语言环境,是因为LC_CTYPE
环境变量设置为UTF-8
,但UTF-8
在 CentOS 系统上不是有效的语言环境名称(请参阅 的输出locale -a
以获取支持的语言环境列表)。它在极少数系统中是有效的区域设置,一个已知的例外是 Apple macos(以前称为 macOS、OS/X 和 MacOS/X 或 Apple 营销团队在某一天喜欢的任何名称)。
当语言环境类别为 时LC_CTYPE
,它涵盖了字符编码除其他事项外,无法找到,它默认为C
大多数系统(包括 CentOS)上的区域设置,charmap 是 ASCII。
您的输出locale
还显示LANG
环境变量设置为en_US.UTF-8
。
这是您系统上的有效区域设置,该LC_CTYPE
区域设置是假的,应该保持未设置,因此,与其他LC_*
类别一样,它派生自$LANG
,并且en_US.UTF-8
区域设置将具有 UTF-8 字符映射,它是 Unicode 的编码其中包含所有已知的存在字符。
您可以通过执行以下操作在 shell 环境中本地解决该问题:
unset -v LC_CTYPE
(假设有一个类似 POSIX 的 shell)
之后您将看到显示的输出locale
:
LC_CTYPE="en_US.UTF-8"
(双引号表示该值为推断,这里来自$LANG
as$LC_ALL
未设置)
为了更永久地解决问题,您需要弄清楚是什么设置了该环境变量。
ssh
一种可能性是您从 macos 系统登录到该 CentOS 系统,并且您的 macos 系统上的环境包含LC_CTYPE=UTF-8
(因为它在那里有效)并且ssh
通常默认配置为将本地化变量传递到服务器1 ,该变量最终被传播到 CentOS 系统上的远程 shell 会话。
如果是这种情况,您需要告诉 macos 停止发送变量LC_CTYPE
,或者使用可移植到其他系统且不是特定于 macos 的值来发送它。例如,您可以添加:
SetEnv LC_CTYPE=en_US.UTF-8
向您~/.ssh/config
发送该变量的特定值。阻止它发送$LC_CTYPE
变量可能会更困难或更笨重,因为它可能涉及更改系统范围的ssh_config
.您也可以将其作为 Apple 的问题提出,因为它向非 Macos 系统发送虚假的环境变量值显然很麻烦。
你还可以这样做:
env -u LC_CTYPE ssh centos-machine
代替:
ssh centos-machine
确保LC_CTYPE
环境变量不会传递给ssh
,因此不会传递给远程 shell。
¹ 通常通过SendEnv LANG LC_*
客户端和AcceptEnv LANG LC_*
服务器端的一些配置指令