如何在终端中将带有外国名称的文件列表写入csv文件?

如何在终端中将带有外国名称的文件列表写入csv文件?

我的终端文件夹中有一些外语名称的文件。在终端上,当我执行“ ”操作时,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

相关内容