簡體   English   中英

Windows使用什么unicode編碼(UTF-8,UTF-16,其他)作為其Unicode數據類型?

[英]What unicode encoding (UTF-8, UTF-16, other) does Windows use for its Unicode data types?

相同的Unicode(標准化) 有不同的編碼。 例如,對於UTF-8編碼, A 對應於 0x0041但對於UTF-16編碼,相同的A 表示為 0xfeff0041

從這篇精彩的文章中我了解到,當我使用C ++ for Windows平台編程並處理Unicode時,我應該知道它以2個字節表示。 但它沒有說明編碼。 (即使它說x86 CPU是little-endian所以我知道這兩個字節是如何存儲在內存中的。)但是我也應該知道Unicode的編碼,這樣我就可以獲得有關符號如何存儲在內存中的完整信息。 C ++ / Windows程序員有沒有固定的Unicode編碼?

存儲在Windows內存中的值始終為UTF-16 little-endian。 但那不是你所說的 - 你在看文件內容。 Windows本身不指定文件的編碼,而是將其留給單個應用程序。

您在文件開頭看到的0xfe 0xff是字節順序標記或BOM 它不僅表明該文件很可能是Unicode,而且它告訴您Unicode編碼的哪種變體。

0xfe 0xff      UTF-16 big-endian
0xff 0xfe      UTF-16 little-endian
0xef 0xbb 0xbf UTF-8

除非您知道如何編寫,否則應將具有BOM的文件假定為8位字符。 這仍然沒有告訴你,如果它是UTF-8或其他一些Windows字符編碼,你只需要猜測。

您可以使用記事本作為如何完成此操作的示例。 如果文件有BOM,那么記事本將讀取它並適當地處理內容。 否則,您必須使用“編碼”下拉列表自行指定編碼。

編輯:Windows文檔沒有更具體的編碼原因是Windows是Unicode的早期采用者,當時每個代碼點只有一個 16位編碼 當確定65536個代碼點不合適時,代理對被發明為擴展范圍的方式,並且UTF-16誕生了。 微軟已經使用Unicode來引用他們的編碼而且從未改變過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM