2012-01-10 80 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