我想我所有的工具包都使用UTF-8,但發現Windows上的一些工具似乎使用CP1252(它似乎是Windows特有的)。這是否創建不兼容的輸出,並且如果是這樣的話,在哪個碼點?如果是這樣,我可以做些什麼嗎?我可以避免在Windows上使用CP1252嗎?
(我不完全理解這些問題,所以我很感激這些編碼的基礎教育)。
我想我所有的工具包都使用UTF-8,但發現Windows上的一些工具似乎使用CP1252(它似乎是Windows特有的)。這是否創建不兼容的輸出,並且如果是這樣的話,在哪個碼點?如果是這樣,我可以做些什麼嗎?我可以避免在Windows上使用CP1252嗎?
(我不完全理解這些問題,所以我很感激這些編碼的基礎教育)。
工具硬編碼代碼頁1252在Windows上是非常可能性不大。更有可能的是它恰好是您的機器上的默認代碼頁。 1252用於西歐和美洲。它在控制面板,區域和語言選項中配置。他們一直在使用不同的名稱,在Win7上,它位於「管理」選項卡中的「更改系統區域設置」。
是的,許多工具使用默認的代碼頁,除非他們有充分的理由選擇另一種編碼。 The BOM是一個很好的理由。值得注意的例子是記事本(除非您將文件+打開對話框中的編碼更改爲除Ansi以外的其他編碼)以及C/C++編譯器。通常沒有什麼特別的,你需要做的使用默認的代碼頁。當你沒有BOM時,猜測文本文件的正確代碼頁是不可能的。谷歌「布什隱瞞事實」爲一個非常有趣的戰爭故事。
CP1252和UTF-8是用於他們上面不同的所有字符< 128相同。所以,如果你堅持使用英語,遠離變音標誌,這些都是一樣的。
大多數的Windows工具將使用任何設置爲當前用戶的當前代碼頁,這將默認爲1252爲美國的Windows。您可以很容易地將其更改爲另一個代碼頁。但是UTF-8不是Windows的可用代碼頁選項之一。 (我希望是)。
非常清晰,相應地失望!不幸的是,我們處理其他人撰寫的文本,所以我們必須處理大量的代碼點。 – 2009-12-21 21:48:02
Windows下有些工具就會明白UTF-8 byte-order mark在文件的開始。不幸的是,我不知道如何確定這是否會起作用,除了嘗試它。
雖然在技術上使用UTF字節順序標記作爲文件是UTF的指示是錯誤的,但我已經看到了這個工作(我自己也做過了)。 – 2009-12-21 22:13:34
現在,關於你的問題:是的,仍然有工具,有對UTF-8文件嗆。但越來越多的工具「獲得它」。如果你正在開發你自己的東西,你可能想看看所有字符串都是Unicode的Python 3。哲學是儘可能早地將所有輸入轉換爲Unicode(如有必要),並儘可能晚地將其轉換爲目標編碼。有些工具包可以很好地猜測特定文件的編碼(例如,Mark Pilgrim的chardet,端口號爲Mozilla's encoding detector)。如果您使用的是不指定編碼的文件,這很好。
UTF-8支持Windows,但不作爲當前代碼頁。您可以使用UTF-8轉換爲/從中,但不能設置爲當前代碼頁。
首先不要試圖通過設置代碼頁浪費時間 - 這種做法會提醒你西西弗斯神話 - 使用的代碼頁你不能真正解決問題,必須使用Unicode。
唯一真正的解決方案是將您的應用程序構建爲Unicode,因此它將使用UTF-16並在輸入/輸出操作中將UTF-8轉換爲/從UTF-8轉換。這很簡單,因爲fopen支持讀寫UTF-8。
關於使用UTF-8文件的其他Windows工具,您不應該知道,因爲如果該工具能夠使用ASCII,它將使用UTF-8(即使如此它可能無法區分Unicode字符,但至少它將能夠加載/解析文件)。
順便說一句,你忘了指定你正在使用哪種編程語言,以及你在考慮使用哪些Windows工具。
另外,如果你有興趣潔具更多國際化的東西,請訪問我blog.i18n.ro
+1謝謝 - 特別是IsTextUnicode錯誤。 – 2009-12-21 22:48:05