【发布时间】:2019-09-17 07:54:25
【问题描述】:
目前我有一个程序,它试图模仿 (linux) file 命令的功能。我用一些字符解析一个 .txt 文件,并将其解释为各自的解释。但是,当涉及到 ISO8859-1(拉丁语 1)时,我很难区分文件。因为它将 ISO8859-1 字符转换为 UTF-8 编码(例如 æ = e6,而是编码为 c3 b8?)。
当我制作这个 .txt 并将其传递到文件中时:
printf "æøå" > test.txt
file test.txt
简单地返回:
UTF-8 Unicode 文本,没有行终止符。
* od -c -tx1 test.txt : 返回 *
0000000 303 246 303 270 303 245
c3 a6 c3 b8 c3 a5
0000006
谁能向我解释为什么会这样,因为“æøå”前缀包含在 ISO8859-1 编码中,但随后被解释为 UTF8 编码?
【问题讨论】:
-
请edit 您的问题并显示
od -c -tx1 test.txt的输出,以确保文件确实包含预期的十六进制值。顺便说一句:虽然您可能想在 C 中实现某些东西,但您的问题与 C 无关,因为它只提到了一些 shell 命令。 -
@Bodo 我在运行命令时更正了问题并显示了文件的输出。将值解释为 2 字节然后将其转换为 UTF8 是有意义的。然而这对我来说很奇怪,因为 ISO8859-1 标准在 160-255 的范围内包括 æøå。
-
目前还不清楚你觉得这有什么奇怪的地方。如果您的终端编码是 UTF-8,您不希望文件以 UTF-8 创建吗?您预计 ISO8859-1 在什么时候参与?