我试图将文件导入到某个软件,但它抱怨文件未保存为UTF-8。我检查了我的编辑gedit
,并声称它正在保存。我也尝试将其保存为Windows文件,而不是Linux,但这没有帮助。所以,我把文件分割成几部分,发现99%的文件都很好,但是在大约3行文本中,有些软件让软件感到不安。该文件有许多不同的语言,所以很多不寻常的符号。文档中的某些符号可能不是来自UTF-8的吗?UTF-8文件是否可以包含一些不是UTF-8的字符?
回答
您在评论提到字符 “A” 是:
U + FF21 FULLWIDTH大写拉丁字母A
而在UTF-8编码为:
0xEF 0xBC 0xA1
您可以检查这些是否是文件中的字节(最有可能)。
如果是这样,那么它是你的软件中的一个错误。也许它会尝试通过查看文件的第一个字节来自动发现文件的编码或类型,并且它会以某种方式感到困惑。
也许它看到第一个字节(0xEF),它无法预期的是一个BOM(字节顺序标记),它是UTF-8:0xEF 0xBB 0xBF。但它不在那里,所以会引发错误。
有些程序没有正确处理UTF-8的一些特性。
例如,某些程序无法正确读取/写入代理对作为单个UTF-8代码点,而是为每一对写入/期望两个分开的UTF-8代码点。
某些程序无法处理BMP以外的代码点,而这些代码点完全是第一个64K字符。
你应该检查你的文件是否有这些。
UTF-8文件可以包含一些不是UTF-8的字符吗?
不,因为它不会是一个UTF-8文件。
我也尝试保存为Windows文件而不是Linux,但这并没有帮助。
Windows和Unix行结尾都与UTF-8无关。
该文件有很多不同的语言,所以很多不寻常的符号。文档中的某些符号可能不是来自UTF-8的吗?
否。所有符号(Unicode码点)都可以用UTF-8表示。但是,文件中的某些字节可能不是有效的UTF-8编码。
这是不可能的Gedit的将输出无效UTF-8,如果有人声称这样做,所以有几种可能性:
- 的unicode标记正在使用的是进口软件无法读取。
- 未使用unicode标记,重要软件期望使用unicode标记。
- 导入软件不能正确解析UTF-8。
- 导入软件无法识别所有的代码点。有关更多信息,请参阅rodrigo的answer。
我已经将问题缩小到单个字母字符“A”在一开始(第一行中的第一个字符)。如果放置在文件的第一行,它只会导致问题。如果放置在其他地方,则没有问题,并且文件成功导入。 – Village 2012-01-10 12:58:53
@Village:这可能是某些字节顺序标记(可能性1)的一部分,但您需要提供更多信息。 – 2012-01-10 15:57:26
- 1. 检查char *缓冲区是否包含UTF8字符?
- 2. 检查一个字符串是否不包含一些文字
- 3. 什么是(一些)UTF8字符串函数C
- 4. 是否有用于UTF8字符的分隔符字节?
- 5. 是否可以使用unicode或utf8在WxDC中绘制文本?
- 6. 检查NSData是否包含ASCII或UTF8编码
- 7. UTF8和日文字符
- 8. 包含文件是否可以从另一个包含文件调用函数?
- 9. PHP检查字符串是否包含一些字母/数字
- 10. QLPreviewController和UTF8字符
- 11. Utf8 - 如何清理这些字符串?
- 12. 多字节的UTF8字符
- 13. utf8_unicode_ci似乎不是UTF8
- 14. UTF8编码含+
- 15. 是否可以在MongoDB中存储UTF8-mb4?
- 16. wxPython:wx.PyControl是否可以包含一个wx.Sizer?
- 17. wso2是和esb UTF8
- 18. 不能编码字符串UTF8和UTF8在迅速
- 19. 是否可以包含压缩文件中的JavaScript文件?
- 20. NodeJS UTF8字符串显示为?而不是表情符
- 21. 检查文件是否存在以及它是否包含特定字符串
- 22. OpenId标识符是否可以包含unicode字符?
- 23. 检查字符串是否包含字(不是子字符串!)
- 24. HTTP头上的UTF8字符
- 25. 使用Wireshark的UTF8字符
- 26. 字符串限制字 - UTF8
- 27. 如何使用(可读的)UTF8字符编写文件?
- 28. ELF符号可以用UTF8表示吗?
- 29. 使用UTF8文字字符xcode ENUM
- 30. 如何验证字符串是否包含某些字符?
[UTF-8验证]的可能重复(http://stackoverflow.com/questions/115210/utf-8-validation) – unwind 2012-01-10 12:31:05