這是一個關於Unicode的初學者問題。我正在使用Embarcadero C++ Builder 2009,他們據說改變了默認字符串以使用Unicode。Unicode轉換問題
- 我在我的源代碼編輯器中輸入了各種不符合標準「7位ASCII」的符號。
- 我的程序使用C++ Builder的String類型來獲取用戶輸入。
- 我也通過將值設置爲wchar_t來手動添加輸入。
似乎在解釋符號的方式上存在衝突。有時我會得到一個符號,例如代碼0x00C7('Ç'),但有時候相同的符號會被編碼爲0xFFC7,例如在源代碼編輯器中。據我瞭解,前者是合適的Unicode,後者是「別的東西」。有人能證實這一點嗎?
我在想這個「別的東西」編碼是從哪裏來的,以及如何擺脫它?
編輯:進一步的研究:它似乎是0xFF的**出現編碼,其中一個地方就是,當我做這樣的事情:
string str = ...;
wchar_t wch = (wchar_t)str[i];
同樣的結果不管它是的std :: string或VCL字符串。 wchar_t
與Unicode不一樣嗎?
如果使用utf-8進行編碼,則每個unicode字符可能佔用1,2或4個字節或更多。據我瞭解,wchar_t每個字符的大小總是2個字節,所以可能是問題所在。 – greatwolf 2011-12-21 10:23:16
@VictorT。那麼我應該使用哪種字符類型?我認爲普通** char **是8位。 – Lundin 2011-12-21 10:27:36
對於寬字符的字符串(Unicode),您應該使用'wstring'而非'string'。新的'String'類型使用以UTF-16存儲的寬字符(不要擔心其他編碼,例如UTF8)。你的代碼'string str = ...;'會丟失數據。那麼你不應該在你的第二行需要演員陣容。 – 2011-12-22 16:13:30