簡體   English   中英

C ++ unicode UTF-16編碼

[英]C++ unicode UTF-16 encoding

我有一個寬字符串是L“hao123--我的上網主頁”,它必須編碼為“hao123 - \\ u6211 \\ u684 \\ u4E0A \\ u7F51 \\ u4E3B \\ u9875”。 我被告知編碼字符串是一種特殊的“%uNNNN”格式,用於編碼Unicode UTF-16代碼點。 這個網站上 ,它告訴我它是JavaScript逃脫。 但我不知道如何使用C ++對其進行編碼。

有沒有圖書館可以讓它工作? 或者給我一些提示。

謝謝我的朋友!

在字符串文字中嵌入unicode通常不是一個好主意,也不是可移植的; 無法保證wchar_t為16位且編碼為UTF-16。 雖然在Windows上使用Microsoft Visual C ++(特定的C ++實現)可能就是這種情況,但在OS X的GCC(另一種實現)上,wchar_t是32位。 如果您有某種本地化的字符串常量,最好使用某種特定編碼的配置文件,並將它們解釋為已經在該編碼中編碼。 Unicode國際組件(ICU)庫為解釋和處理unicode提供了很好的支持。 另一個用於在(但不解釋)編碼格式之間進行轉換的好庫是libiconv

編輯
我有可能誤解你的問題...如果問題是你已經有一個UTF-16字符串,並且你想將它轉換為“unicode-escape ASCII”(即一個ASCII字符串,其中unicode字符由“\\ u”后跟字符的數值),然后使用以下偽代碼:

for each codepoint represented by the UTF-16 encoded string:
    if the codepoint is in the range [0,0x7F]:
       emit the codepoint casted to a char
    else:
       emit "\u" followed by the hexadecimal digits representing codepoint

現在,為了獲得代碼點,有一個非常簡單的規則...... UTF-16字符串中的每個元素都是一個代碼點,除非它是“代理對”的一部分,在這種情況下它和它之后的元素構成一個單一代碼點。 如果是這樣,則unicode標准定義了將“前導代理”和“尾隨代理”組合成單個代碼點的過程。 注意,UTF-8和UTF-16都是可變長度編碼......如果沒有用可變長度表示,則代碼點需要32位。 Unicode轉換格式(UTF)常見問題解答解釋了編碼以及如何識別代理對以及如何將它們組合到代碼點中。

只需使用\\x而不是\\u\u003c/code> 。

暫無
暫無

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

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