【发布时间】:2018-10-09 15:39:33
【问题描述】:
我的 shell 脚本遇到了繁琐的问题。它将文件从另一台服务器复制到它的服务器。麻烦就在这里:
要复制的文件的名称中有一个特殊的字符,例如:“CDACampaña”。但是当我使用 vi 命令打开我的文件时,它看起来像 CDACampaña.txt (使用 cat 命令时它看起来正确),并且当我运行日志显示我的文件在 CDACampa 之后没有更多...
我的文件代码示例(这不是功能性的,只是为了理解)
#Local machine
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code
#Unix server vi command
blabla code
cp //remote/CDACampaña.txt localfolder
bleble code
#Unix log
blabla code
cp //remote/CDACampa
我尝试将我的 shell 上传为 UTF8、UTF8 WO BOOM、ANSI,并使用 UNIX 或 WINDOWS eol,但没有任何效果。
请问有什么办法吗?
已编辑:
Unix 语言环境:
LANG=en_US.UTF-8
LC_CTYPE="en_US.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=
本地PC编码:
IsSingleByte : True
BodyName : iso-8859-1
EncodingName : Europeo occidental (Windows)
HeaderName : Windows-1252
WebName : Windows-1252
WindowsCodePage : 1252
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 1252
【问题讨论】:
-
您未能为 UTF-8 配置
vi。 -
这实际上很不清楚,但字符串显然是 UTF-8,在某些遗留的 8 位字符集中查看。如果没有有关所涉及的实际编码和/或文件名中的实际字节的信息,我们只能推测。请edit您的问题包括相关详细信息;请参阅Stack Overflow
character-encodingtag info page 中的指南。您的locale设置是什么?您在远程服务器上观察到什么行为,以及在本地观察到什么? -
在 CP1252 终端中打印 UTF-8 字符...嗯,是的,这会导致您的问题(就输出的打印方式而言,脚本本身没有任何问题)。使用更好的终端程序怎么样?
-
...顺便说一句,我仍在等待
LC_ALL=C; printf '%q\n' *.txt输出以明确(不依赖于区域设置)的形式显示本地和远程名称。这会让我们知道这些名字是否安全通过,只是显示错误,或者实际上被篡改了。
标签: bash shell unix utf-8 char