我的终端文件夹中有一些外语名称的文件。在终端上,当我执行“ ”操作时,ls
我会看到下图中右侧的列表。
当我这样做时ls -t | tail -n +2
,我看到了如下图所示的真实角色。
我想将第二张图片中的原始字符文件名列表写入 csv 文件?有没有办法做到这一点?我在这里发现了非常相似的问题,但这些问题的文件名不是外国的。这是如果我使用它的样子ls -t | tail -n +2 > files.csv
但我想要包含原始名称的列表,因为我需要根据原始名称从现有文件中获取元信息,其中文件名不按任何顺序,文件数量也不同。
在 MobaXterm 上,当我进入终端设置时,字符集被选择为 UTF-8(编码)。另外,我检查了是否看到 UTF-8。
~$ locale -a
C
C.UTF-8
POSIX
答案1
看起来这些文件名是用 UTF-8 编码的,您的终端是 UTF-8,但您的区域设置不是。locale charmap
可能会输出类似 ANSI_X3.4-1968
(又名 ASCII)的内容。 ASCII 不定义任何代码点高于 127 的字符。非 ASCII UTF-8 字符全部编码在 2 个或更多字节上,且全部大于 127。
ls
将这些字节呈现为,?
因为它们不形成 ASCII(当前区域设置字符映射)中的可打印字符。
您需要使用字符映射为 UTF-8 的语言环境。在你的清单中可用的据报道locale -a
,仅剩下.locales C.UTF-8
。
跑步:
export LANG=C.UTF-8
locale
$LC_XXX
如果某些变量被设置为其他内容,您可能需要取消设置它们。
请注意,Microsoft 产品可能无法识别 UTF-8 文件本身,除非它们以ZERO WIDTH NO-BREAK SPACE
字符开头(也用作 UTF-16 中的字节顺序标记,UTF-8 中的字节顺序没有问题)。
您可以添加该字符并将行结尾转换为 Microsoft 格式:
unix2dos -m < file.csv > file.ms.csv