在Windows上不使用Unicode有什麼缺點?在Windows中不使用Unicode有什麼缺點?
通過Unicode的,我的意思是WCHAR
和廣泛的API函數。 (CreateWindowW,MessageBoxW,等等)
我可以不使用此遇到了什麼問題?
在Windows上不使用Unicode有什麼缺點?在Windows中不使用Unicode有什麼缺點?
通過Unicode的,我的意思是WCHAR
和廣泛的API函數。 (CreateWindowW,MessageBoxW,等等)
我可以不使用此遇到了什麼問題?
處理系統API時,您的代碼將無法正確處理當前選定代碼頁之外的字符。。
典型的問題包括不支持的字符被轉換爲問號,無法處理與特殊字符的文本,特別是文件與其名稱/路徑「奇怪的字符」。
此外,一些新的API是隻存在於「寬」的版本。因爲「A
」版本的API通常只是圍繞「W
」API的簡潔包裝,將參數隨時轉換爲UTF-16,所以,每個涉及文本的API調用都會稍微慢一些,您在撥打「普通」W
時會有一些開銷。
A
」的API don't speak UTF-8,所以你必須轉換爲UTF-無論如何,請致電W
版本。我相信原來的問題的要點是「我應該編譯所有的Windows應用程序以‘#定義_UNICODE’,這有什麼不好的一面,如果我不?
我原來的答覆是」是的,你應該。我們已經移動了8位ASCII碼,'_UNICODE'是任何現代Windows代碼的合理默認值。「
對於Windows,我仍然認爲這是相當不錯的建議,但我刪除了原來的答覆。不知道,直到我重讀了我自己的鏈接多少「UTF-16是事務相當悲慘狀況」(如利瑪竇意大利雄辯地把它)
例如:
微軟...錯誤地使用了「統一」和「widechar」爲 'UCS-2'和'UTF-16'的同義詞。此外,由於UTF-8不能是 組作爲編碼爲窄字符串WinAPI的,一個必須編譯她 代碼_UNICODE而非_MBCS。 Windows C++程序員 指出Unicode必須用'widechars'來完成。作爲 這個混亂的結果,他們現在是關於什麼是 正確的文字處理最困惑的。
我衷心推薦這三個環節:
恕我直言...
雖然他們的編碼問題都是真的,但我認爲將它描述爲「錯誤」並不公平,因爲他們在unicode實際上全是16位簡單字符時採用了這種方法。試圖做正確的事情,並因改變標準而被超越的痛苦...... – jcoder
什麼Windows調用「Unicode」更準確地稱爲「UTF-16」,Unicode的幾個*表示之一*。 –
它也是little endian utf-16精確地 – EdChum
http://utf8everywhere.org/提供關於什麼是正確和什麼是錯誤的用Windows的C++程序的Unicode做什麼。 –