文件名显示为 ?当“ls”时为字符,而当“ls |”时为垃圾字符grep 弗兰`?

文件名显示为 ?当“ls”时为字符,而当“ls |”时为垃圾字符grep 弗兰`?

定义如何将具有无法识别字符的文件名替换为其他字符的配置是什么。例如,在我的 Linux 系统中,相同的文件在 PuTTY 中的 UTF8 环境设置中显示不同

$ ls | grep fran
fran▒aise

$ ls
fran?aise

fran▒aise-> 它的编码字节是fran\xe2\x96\x92aise

我猜系统正在做这一切,因为它不理解拉丁编码\xe7字节

此外,当我复制到另一个基本上是不同 NFS 安装的文件夹时,它会显示不同的名称:fran栩se

我如何检查执行所有这些隐式更改的配置?

locale:
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

答案1

在我用的腻子中

配置 -> Windows -> 翻译 -> 远程字符集:UTF-8

在Linux中

LANG=en_US.UTF-8

一切正常

Linux > echo élève > française
Linux > od -c française
0000000 303 251   l 303 250   v   e  \n
0000010
Linux > ls | od -c
0000000   f   r   a   n 303 247   a   i   s   e  \n
0000013
Linux > ls
française

和完整的stty

Linux > stty -a
speed 38400 baud; rows 40; columns 129; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

当 scp 从 windows 到 linux 时,一个名为vérification.xml

在dos中

vÚrification.xml          | 99 kB |  99.9 kB/s | ETA: 00:00:00 | 100%

在Linux中

Linux > LANG=C.utf8 ls
fran??aise  v?rification.xml
Linux > LANG=POSIX ls
fran??aise  v?rification.xml
Linux > LANG=french ls
française  v▒rification.xml
Linux > LANG=fr_FR.iso88591 ls
française  v▒rification.xml
Linux > LANG=fr_FR.utf8 ls
française  v?rification.xml

相关内容