UTF-8文件是否包含一些不是UTF-8的字符?

时间:2012-01-10 12:28:10

标签: linux utf-8

我正在尝试将文件导入某些软件,但它抱怨该文件未保存为UTF-8。我已经检查了我的编辑器gedit,并声称它正在保存。我也尝试保存为Windows文件,而不是Linux,但这没有帮助。所以,我把文件分成几部分,发现,99%的文件都很好,但在大约3行文本中,有些东西让软件感到不安。该文件中包含许多不同的语言,因此有许多不寻常的符号。文档中的某些符号是否可能不是来自UTF-8?

3 个答案:

答案 0 :(得分:2)

  

UTF-8文件是否包含一些不是UTF-8的字符?

不,因为它不会是UTF-8文件。

  

我也尝试将其保存为Windows文件,而不是Linux,但这没有帮助。

Windows和Unix行结尾都与UTF-8无关。

  

该文件中包含许多不同的语言,因此有许多不寻常的符号。文档中的某些符号是否可能不是来自UTF-8?

没有。所有符号(Unicode代码点)均可由UTF-8表示。但是,文件中的某些字节可能无效UTF-8编码。

如果Gedit声称要输出无效的UTF-8,它不太可能输出无效的UTF-8,所以有一些可能性:

  1. 正在使用导入软件无法读取的unicode标记。
  2. 未使用unicode标记,重要的软件需要一个。
  3. 导入软件未正确解析UTF-8。
  4. 导入软件无法识别所有代码点。有关详细信息,请参阅rodrigo的answer

答案 1 :(得分:2)

您在评论中提到的字符“A”是:

  

U + FF21全长拉丁文大写字母A

在UTF-8编码为:

0xEF 0xBC 0xA1

您可以检查这些是文件中的字节数(最有可能)。

如果是这样,那么这是您软件中的错误。也许它试图通过查看文件的第一个字节来自动发现文件的编码或类型,并且它会以某种方式混淆。

也许它看到了第一个字节(0xEF)并且它一无所知地期望BOM(字节顺序标记),即UTF-8:0xEF 0xBB 0xBF。但它不存在,所以它会引发错误。

答案 2 :(得分:1)

有些程序没有正确处理UTF-8的某些特性。

例如,某些程序无法正确读取/写入代理项对作为单个UTF-8代码点,而是为每个代码点写入/期望两个单独的UTF-8代码点。

某些程序无法处理BMP之外的第一个64K字符的代码点。

您应该检查您的文件是否包含其中任何一个。