[問題] 讀取UTF-8編碼

作者: wsx100 (喝車開酒)   2014-04-19 02:45:20
開發平台(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正確讀入呢@@?
之後要能夠支援依照標點符號切割成子字串..
請高手指點!
謝謝
作者: carylorrk (carylorrk)   2014-04-19 03:08:00
UTF8-CPP 之類的來幫忙,不然就先用 iconv 轉成等寬的?不過後者要小心自己檔案的編碼
作者: LPH66 (-6.2598534e+18f)   2014-04-19 07:04:00
嗯...我只能說用 wchar_t 是完全走錯路了wchar_t「一般來說」是用在 UTF-16LE 上的(加引號表示這不是標準規定的, 而是 Win 平台的 ABI 設定)UTF-8 的話最通常的方法還是讀成 char 陣列之後再去解碼到這時可能會經由一些手段轉成 wchar_t, 但並不是直接讀入再者你的後續問題「依照標點符號」, 你的那些標點符號的指定也要小心, 不然很有可能即使正確讀進來了但還是切不開
作者: GameHeven (Mark Williams)   2014-04-19 09:55:00
UTF8每個字是1~6個bytes,你要自己偵測,自己切割
作者: prismwu   2014-04-19 11:23:00
之前有試著做也是大失敗...字不一樣長不知道有沒有LIB可用
作者: LiloHuang (十年一刻)   2014-04-19 13:29:00
編譯器版本如果夠新可以試試 http://goo.gl/xn9lLo
作者: buganini (霸格尼尼)   2014-04-19 17:27:00
code看起來跟UTF-8沒什麼關係啊,不過locale為什麼要設成空的? 試試UTF-8的locale? 如果你要切的標點符號是ASCII的話,那也不用特別處理,普通的strtok/strsep都可以你只要弄對locale確保資料傳得過那一層就好了
作者: donkeychen (Bad_To_The_Bone)   2014-04-21 11:46:00
http://nopaste.info/bccc56a8e1.html 不知道有沒有幫助

Links booklink

Contact Us: admin [ a t ] ucptt.com