我需要将 ASCII 文本格式转换为 UTF-8。
以下是我通过命令执行的操作iconv
:
[root@main tmp]# cat 文件1 1 5 6 [root@main tmp]# 文件 File1 文件 1:ASCII 文本 [root@main tmp]# iconv -f ascii -t utf-8 文件 1 > 文件 2 [root@main tmp]# 文件 File2 文件2:ASCII 文本
(仍然是 ASCII,不是 utf-8)
关于如何将其从 ascii 转换为 utf-8 有什么建议吗?
答案1
这里有两件事相关:
file
Solaris 上的股票实用程序很糟糕- 7 位 ASCII 字符以字节兼容方式包含在 UTF-8 中。这意味着当您的输入文件仅包含 7 位 ASCII 字符时,不会发生实际转换。即使是一个好的
file
实用程序也会显示 ASCII。
因此,您可能希望将文件转换为某种“扩展”8 字节 ASCII 编码。例如拉丁语1。然后你必须用 iconv 指定它,例如:
$ iconv -f latin1 -t utf8 file1 > file2
然后您可以像这样比较输出:
$ cmp file1 file2
$ hexdump ...
$ $EDITOR file2
像 vim 这样的编辑器提供了一些命令来查看某些字符的字节值,动态更改使用的编码等。
答案2
如果您确实想file
声明您的 ASCII 文件是 UTF-8(无论如何它已经是这样),您可以运行此命令,该命令会在前面添加一个 UTF-8BOM(字节顺序标记)对它:
(printf "\357\273\277";cat File1) > File2
编辑:但有几个问题:
这适用于 Linux 发行版通常提供的查找版本,但 Solaris
file
不会将文件检测为 UTF-8,而只是检测“数据”BOM 可能会混淆用于处理文本文件的工具