从 ascii 转换为 utf-8 格式 - iconv 不起作用

从 ascii 转换为 utf-8 格式 - iconv 不起作用

我需要将 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

这里有两件事相关:

  1. fileSolaris 上的股票实用程序很糟糕
  2. 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 发行版通常提供的查找版本,但 Solarisfile不会将文件检测为 UTF-8,而只是检测“数据”

  • BOM 可能会混淆用于处理文本文件的工具

相关内容