看板 C_and_CPP 關於我們 聯絡資訊
c++11 有個 unicode 功能, 不過我覺得可能沒想像中好用。 處理 utf8 string, 我覺得 qt 的 qstring 很好用, 你可以試試看, 就算不寫 gui 程式, 我也會用 qstring 來處理 utf8 string, 實在方便不少, 就像用 std::string 那樣的好用。 也許會覺得要處理 utf8 string 得 link qt 這個大東西很恐怖, 不過事實上處理 utf8 就是這麼困難。 https://github.com/descent/progs/tree/master/handle_utf8_string_by_qstring 給你參考。 QApplication app(argc, argv); 就算你不寫 gui 一定也需要宣告 QApplication, 否則中文 utf8 string 會有問題, 我不知道為什麼? 若要處理 xml, 我用過 qt QDomDocument class, 你可以試試看。 ※ 引述《wsx100 ()》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : linux, gcc : 問題(Question): : 文件是xml : 採用UTF-8編碼 : 如果用char *[]去處理的話 之後要針對標點符號split會失敗 : 所以我查到用wchar_t *[]去處理 : 可是結果不如預期 : 餵入的資料(Input): : 底下連結是xml檔案 : https://dl.dropboxusercontent.com/u/100819329/file.zip : 預期的正確結果(Expected Output): : <?xml version="1.0" encoding="UTF-8"?> : <xml> : <p> : <id>01</id> : <p>你好</p> : 錯誤結果(Wrong Output): : <?xml version="1.0" encoding="UTF-8"?> : <xml> : <p> : <id>01</id> : <p> : 程式碼(Code):(請善用置底文網頁, 記得排版) : https://gist.github.com/anonymous/11058612 : 補充說明(Supplement): : 我從下午6點用到晚上2點還沒搞定@@ : 或是有別的方法可以把UTF-8的xml正確讀入呢@@? : 之後要能夠支援依照標點符號切割成子字串.. : 請高手指點! : 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.114.137.79 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397891361.A.DB6.html
uranusjr:其實 QString 本身 dependecies 應該沒有很多(不考慮 04/19 16:00
uranusjr:locale 和 regex 之類有的沒的東西的話), 說不定可以抽 04/19 16:01
uranusjr:出來, 等有空來研究看看好了 04/19 16:01
uranusjr:說真的 QString 應該是我看過最好的 C 相關 Unicode 實作 04/19 16:02
buganini:UTF-8並沒有多複雜啊? 如果只是要正確斷字,很簡單就 04/19 17:30
buganini:可以辦到了,libchewing裡面有個http://0rz.tw/gNZJo 04/19 17:32
buganini:如果是normalize/locale那塊,那大概也是call ICU 04/19 17:34
buganini:不是做在QT裡面 04/19 17:35
descent:有 qstring, 我才不想去用 icu, std::string 要是也能 04/19 17:46
descent:有 qstring 的能力, 那就太棒了 04/19 17:47
※ 編輯: descent (58.114.144.217), 04/19/2014 17:49:12
buganini:目測應該是永遠不會有吧,std::string是char based 04/19 17:49
uranusjr:std::string 根本只是 char array 的包裝而已, 別肖想了 04/19 17:52
buganini:正確作法應該是extend std::string加上UTF-8 specific 04/19 17:53
buganini:的function 04/19 17:53
uranusjr:如果要有真正的 string abstraction 目標當然就不是 UTF8 04/19 17:54
buganini:不過這樣效率也不好,真要處理字串還是解成wchar吧 04/19 17:54
uranusjr:而已, 很多編碼都有一些 quicks 要處理 04/19 17:55
uranusjr:寬字元也不是萬用解, 不要忘記 surrogatepairs 啊... 04/19 17:56
buganini:ㄟ 這就尷尬了 wchar有16bits也有32bits orz 04/19 17:58
buganini:32bits的話就算萬用了吧 04/19 17:59
uranusjr:32-bit 應該是夠用很長一段時間沒錯啦XD 04/19 18:04
buganini:目前有RFC 3629把上限擋在U+10FFFF應該夠用完這輩子了(?) 04/19 18:05
buganini:不對 他只擋了UTF-8的上限,沒有說unicode不能超過 04/19 18:08
buganini:雖然目前還沒超過,範圍內的空間也還綽綽有餘就是了 04/19 18:08
uranusjr:不過應該這輩子夠用了, 之後反正肯定不是我維護沒差(欸 04/19 18:13
descent:兩位大大對編碼真熟悉 04/19 18:17
buganini:補充一下,U+10FFFF也是UTF-16 surrogate pairs的上限 04/19 18:21
LPH66:我記得 unicode 就是因為 RFC 3629 擋住了才只定到 U+10FFFF 04/19 18:45
LPH66:唔, 應該反過來說, 因為 UTF-16 surrogate pairs 上限在那裡 04/19 18:47
LPH66:才有 RFC 3629 出來把 UTF-8 擋住的..不然 UTF-8 原本是支援 04/19 18:47
LPH66:全部的 32-bit 編碼空間的 (一直到 6 byte 長的編碼) 04/19 18:48
buganini:無限期支持淘汰UTF-16!!! 04/19 18:49
buganini:是個不上不下的東西啊… 04/19 18:49
Bencrie:QString 真的蠻好用的 XD 04/19 19:21
donkeychen:支持反對UTF-16 +1+1...... 04/21 11:37
donkeychen:之前在弄sqlite3時也有用過QString 04/21 11:41
donkeychen:因為 SQLite Database Browser 的source code就放Qt的 04/21 11:42