2013-01-03 52 views
1

在Windows上不使用Unicode有什麼缺點?在Windows中不使用Unicode有什麼缺點?

通過Unicode的,我的意思是WCHAR和廣泛的API函數。 (CreateWindowW,MessageBoxW,等等)

我可以不使用此遇到了什麼問題?

+3

什麼Windows調用「Unicode」更準確地稱爲「UTF-16」,Unicode的幾個*表示之一*。 –

+2

它也是little endian utf-16精確地 – EdChum

+1

http://utf8everywhere.org/提供關於什麼是正確和什麼是錯誤的用Windows的C++程序的Unicode做什麼。 –

回答

6

處理系統API時,您的代碼將無法正確處理當前選定代碼頁之外的字符。。

典型的問題包括不支持的字符被轉換爲問號,無法處理與特殊字符的文本,特別是文件與其名稱/路徑「奇怪的字符」。

此外,一些新的API是隻存在於「寬」的版本。因爲「A」版本的API通常只是圍繞「W」API的簡潔包裝,將參數隨時轉換爲UTF-16,所以,每個涉及文本的API調用都會稍微慢一些,您在撥打「普通」W時會有一些開銷。


  1. 沒有停止你在一個狹窄的字符Unicode編碼工作(=> UTF-8)你的應用程序中,但Windows「A」的API don't speak UTF-8,所以你必須轉換爲UTF-無論如何,請致電W版本。
3

我相信原來的問題的要點是「我應該編譯所有的Windows應用程序以‘#定義_UNICODE’,這有什麼不好的一面,如果我不?

我原來的答覆是」是的,你應該。我們已經移動了8位ASCII碼,'_UNICODE'是任何現代Windows代碼的合理默認值。「

對於Windows,我仍然認爲這是相當不錯的建議,但我刪除了原來的答覆。不知道,直到我重讀了我自己的鏈接多少「UTF-16是事務相當悲慘狀況」(如利瑪竇意大利雄辯地把它)

例如:

http://utf8everywhere.org/

微軟...錯誤地使用了「統一」和「widechar」爲 'UCS-2'和'UTF-16'的同義詞。此外,由於UTF-8不能是 組作爲編碼爲窄字符串WinAPI的,一個必須編譯她 代碼_UNICODE而非_MBCS。 Windows C++程序員 指出Unicode必須用'widechars'來完成。作爲 這個混亂的結果,他們現在是關於什麼是 正確的文字處理最困惑的。

我衷心推薦這三個環節:

恕我直言...

+3

雖然他們的編碼問題都是真的,但我認爲將它描述爲「錯誤」並不公平,因爲他們在unicode實際上全是16位簡單字符時採用了這種方法。試圖做正確的事情,並因改變標準而被超越的痛苦...... – jcoder

相關問題