2012-03-28 20 views
-1

我想在文本中使用\u轉義序列,但轉換看起來很混亂。wxWidgets和轉換到和來自unicode代碼點

據我所知\u使用符號\uXXXX其中X是一個十六進制數字,並描述了一個codef在utf8?飛機嗎?但是utf8是一種可變長度編碼,所以它不一定是4位數字?

那麼如何去轉換wxString[0] -> '\uXXXX'後續?我使用mb_str(wxConvUTF8)還是什麼?所有這些unicode轉換的東西似乎現在讓我感到困惑。

如何處理相反的轉換?如果我通過'\ uXXXX'序列接收輸入,這是以內聯方式查找它們的正確方法,並且轉換爲unicode字符以進行輸出?

+1

在'utf8平面'中不存在'codepoint'。請更簡單地描述你想要做什麼。還要指定你使用的是哪個版本的wxWidgets(2.8或2.9) - 2.9對於這個東西來說更容易。 – ravenspoint 2012-03-28 11:47:24

+0

是的,這個東西很混亂。我同意ravenspoint,如果你更好地描述你想要做的事情,問題會更好。 'u符號看起來像是C++ 11的特性,用'\ x'代替。 http://stackoverflow.com/questions/6796157/unicode-encoding-for-string-literals-in-c11 – 2012-03-28 16:33:50

回答

1

那麼如何去一個在轉換wxString [0] - > '爲\ uXXXX'

你能做到這一點,在wxWidgets的v2.9.x

wxString x = L"\x014C"; 
const char* xbuf = (const char*)x.wc_str(); 
wxString y = wxString::Format("%s = \\u%02X%02X",x,xbuf[1],xbuf[0]); 
wxMessageBox(y,"Unicode test"); 

將會產生這樣的:

enter image description here

注意在xbuf中訪問字節的順序。這不是跨平臺的!這取決於字節在您的機器上如何存儲在單詞中。這就是爲什麼經常使用UTF8而不是UTF16的原因。

+1

fn_str()對於看起來不像文件名的東西有什麼奇怪的用處。 – 2012-03-28 18:12:57

+0

你說得對,VZ。 wc_str()是一個更好的選擇。 – ravenspoint 2012-03-28 19:24:22

+0

「這就是爲什麼經常使用UTF8而不是UTF16的原因。」 UTF-8是「經常使用」的原因是因爲它不需要實際的工作來支持許多C或C++ API。他們只是一如既往地拿着'char *';他們不必採取新的字符串類型。 – 2012-03-28 19:28:52