2012-01-10 76 views
0

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

+0

[UTF-8验证]的可能重复(http://stackoverflow.com/questions/115210/utf-8-validation) – unwind 2012-01-10 12:31:05

回答

2

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

U + FF21 FULLWIDTH大写拉丁字母A

而在UTF-8编码为:

0xEF 0xBC 0xA1 

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

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

也许它看到第一个字节(0xEF),它无法预期的是一个BOM(字节顺序标记),它是UTF-8:0xEF 0xBB 0xBF。但它不在那里,所以会引发错误。

1

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

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

某些程序无法处理BMP以外的代码点,而这些代码点完全是第一个64K字符。

你应该检查你的文件是否有这些。

2

UTF-8文件可以包含一些不是UTF-8的字符吗?

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

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

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

该文件有很多不同的语言,所以很多不寻常的符号。文档中的某些符号可能不是来自UTF-8的吗?

否。所有符号(Unicode码点)都可以用UTF-8表示。但是,文件中的某些字节可能不是有效的UTF-8编码。

这是不可能的Gedit的将输出无效UTF-8,如果有人声称这样做,所以有几种可能性:

  1. 的unicode标记正在使用的是进口软件无法读取。
  2. 未使用unicode标记,重要软件期望使用unicode标记。
  3. 导入软件不能正确解析UTF-8。
  4. 导入软件无法识别所有的代码点。有关更多信息,请参阅rodrigo的answer
+0

我已经将问题缩小到单个字母字符“A”在一开始(第一行中的第一个字符)。如果放置在文件的第一行,它只会导致问题。如果放置在其他地方,则没有问题,并且文件成功导入。 – Village 2012-01-10 12:58:53

+0

@Village:这可能是某些字节顺序标记(可能性1)的一部分,但您需要提供更多信息。 – 2012-01-10 15:57:26