我試圖將文件導入到某個軟件,但它抱怨文件未保存爲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