2011-01-12 52 views
13

由於多個團隊成員使用不同的編輯器(和默認設置)進行開發,因此我正在開發一個分佈有一些unicode編碼文件的代碼庫。我想通過查找所有的Unicode編碼文件並將它們轉換回ANSI編碼來清理我們的代碼庫。在Windows中識別unicode編碼文本文件的最佳方式是什麼?

如何完成此任務的「發現」部分的任何想法都將得到真正的讚賞。

+0

你使用什麼編程語言?我想一個小的VBS腳本可以滿足這個任務。 – LostInTheCode 2011-01-12 18:49:42

+0

我們正在使用c#,但是我正在尋找更多可用於搜索unicode編碼文件的工具。你在文本文件中尋找什麼來將它們識別爲unicode? – HOCA 2011-01-12 19:04:47

回答

5

參見​​或「How to reliably guess the encoding [...]?」

  • UTF-8可以與驗證被檢測到。您也可以查看BOM EF BB BF,但不要依賴它。
  • 可以通過查找BOM來檢測UTF-16。
  • UTF-32可通過驗證或物料清單來檢測。
  • 否則假設ANSI代碼頁。

我們的代碼庫不包含任何 非ASCII字符。我將嘗試grep 獲取我們代碼庫中文件的BOM。 感謝您的澄清。

那麼,這使得事情很多更簡單。沒有非ASCII字符的UTF-8 ASCII。

4

Unicode是一種標準,它不是一種編碼。有很多實現Unicode的編碼,包括UTF-8,UTF-16,UCS-2等。任何這些編碼轉換成ASCII都完全取決於「不同編輯器」使用的編碼。

某些編輯器在Unicode文件的起始位置插入BOM的字節順序標記。如果您的編輯人員這樣做,您可以使用它們來檢測編碼。

ANSI是一個發佈了數字字符數據編碼的標準機構。 MS DOS使用的並且在Windows中支持的「ANSI」編碼實際上是CP-1252,而不是ANSI標準。

您的代碼庫是否包含非ASCII字符?使用Unicode編碼而不是ANSI或CP-1252可能會有更好的兼容性。

+0

我們的代碼庫不包含任何非ASCII字符。我將嘗試在我們的代碼庫中查找文件中的BOM。感謝您的澄清。 – HOCA 2011-01-12 20:44:54

+2

沒有單一的Windows 8位(又名ANSI)編碼,有很多,比如CP1251,CP1252,CP1253等。也看到這個問題:http://stackoverflow.com/questions/3864240/default-code-page-for-each-language-version-of-windows – dalle 2011-01-12 22:12:11

+0

@HOCA,如果你的文件只包含ASCII,它已經在UTF -8並且不需要「轉換」。 – 2011-01-13 18:00:27

0

這很難說,但我首先尋找BOM。大多數編寫Unicode文件的Windows程序都會發布BOM。

如果這些文件存在於您的代碼庫中,那麼他們可能會編譯它們。你可能會問自己,你是否真的需要做這個「整理」。如果您確實需要這樣做,那麼我會詢問處理這些文件的工具鏈如何發現它們的編碼。如果你知道,那麼你將能夠使用相同的診斷。

1

實際上,如果你想在windows中找到一個文件是unicode的話,只需在文件中運行findstr就可以知道它在那裏。

findstr/I/C:「SomeKnownString」文件。txt

它會回來空。然後是一個字母或數字,你知道肯定,運行FINDSTR在文件中:

FINDSTR/I/C:「P」 file.txt的

你可能會得到許多事件和關鍵的是,他們將被分開。這是一個文件是unicode而不是ascii的標誌。

希望這會有所幫助。

相關問題