由於多個團隊成員使用不同的編輯器(和默認設置)進行開發,因此我正在開發一個分佈有一些unicode編碼文件的代碼庫。我想通過查找所有的Unicode編碼文件並將它們轉換回ANSI編碼來清理我們的代碼庫。在Windows中識別unicode編碼文本文件的最佳方式是什麼?
如何完成此任務的「發現」部分的任何想法都將得到真正的讚賞。
由於多個團隊成員使用不同的編輯器(和默認設置)進行開發,因此我正在開發一個分佈有一些unicode編碼文件的代碼庫。我想通過查找所有的Unicode編碼文件並將它們轉換回ANSI編碼來清理我們的代碼庫。在Windows中識別unicode編碼文本文件的最佳方式是什麼?
如何完成此任務的「發現」部分的任何想法都將得到真正的讚賞。
參見或「How to reliably guess the encoding [...]?」
EF BB BF
,但不要依賴它。我們的代碼庫不包含任何 非ASCII字符。我將嘗試grep 獲取我們代碼庫中文件的BOM。 感謝您的澄清。
那麼,這使得事情很多更簡單。沒有非ASCII字符的UTF-8 是 ASCII。
Unicode是一種標準,它不是一種編碼。有很多實現Unicode的編碼,包括UTF-8,UTF-16,UCS-2等。任何這些編碼轉換成ASCII都完全取決於「不同編輯器」使用的編碼。
某些編輯器在Unicode文件的起始位置插入BOM的字節順序標記。如果您的編輯人員這樣做,您可以使用它們來檢測編碼。
ANSI是一個發佈了數字字符數據編碼的標準機構。 MS DOS使用的並且在Windows中支持的「ANSI」編碼實際上是CP-1252,而不是ANSI標準。
您的代碼庫是否包含非ASCII字符?使用Unicode編碼而不是ANSI或CP-1252可能會有更好的兼容性。
我們的代碼庫不包含任何非ASCII字符。我將嘗試在我們的代碼庫中查找文件中的BOM。感謝您的澄清。 – HOCA 2011-01-12 20:44:54
沒有單一的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
@HOCA,如果你的文件只包含ASCII,它已經在UTF -8並且不需要「轉換」。 – 2011-01-13 18:00:27
這很難說,但我首先尋找BOM。大多數編寫Unicode文件的Windows程序都會發布BOM。
如果這些文件存在於您的代碼庫中,那麼他們可能會編譯它們。你可能會問自己,你是否真的需要做這個「整理」。如果您確實需要這樣做,那麼我會詢問處理這些文件的工具鏈如何發現它們的編碼。如果你知道,那麼你將能夠使用相同的診斷。
如果您正在尋找一個編程解決方案,IsTextUnicode()可能是一個選項。
實際上,如果你想在windows中找到一個文件是unicode的話,只需在文件中運行findstr就可以知道它在那裏。
findstr/I/C:「SomeKnownString」文件。txt
它會回來空。然後是一個字母或數字,你知道肯定,運行FINDSTR在文件中:
FINDSTR/I/C:「P」 file.txt的
你可能會得到許多事件和關鍵的是,他們將被分開。這是一個文件是unicode而不是ascii的標誌。
希望這會有所幫助。
你使用什麼編程語言?我想一個小的VBS腳本可以滿足這個任務。 – LostInTheCode 2011-01-12 18:49:42
我們正在使用c#,但是我正在尋找更多可用於搜索unicode編碼文件的工具。你在文本文件中尋找什麼來將它們識別爲unicode? – HOCA 2011-01-12 19:04:47