[問題] 讀取UTF-8編碼

看板C_and_CPP作者時間11年前發表 (2014/04/18 18:45), 11年前編輯推噓5(5013)
留言18則, 7人參與, 最新討論串1/2 (看更多)
開發平台(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), 來自: 111.249.189.178 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1397846723.A.CEC.html ※ 編輯: wsx100 (111.249.189.178), 04/19/2014 02:53:49

04/19 03:08, , 1F
UTF8-CPP 之類的來幫忙,不然就先用 iconv 轉成等寬的?
04/19 03:08, 1F

04/19 03:09, , 2F
不過後者要小心自己檔案的編碼
04/19 03:09, 2F

04/19 07:04, , 3F
嗯...我只能說用 wchar_t 是完全走錯路了
04/19 07:04, 3F

04/19 07:06, , 4F
wchar_t「一般來說」是用在 UTF-16LE 上的
04/19 07:06, 4F

04/19 07:06, , 5F
(加引號表示這不是標準規定的, 而是 Win 平台的 ABI 設定)
04/19 07:06, 5F

04/19 07:07, , 6F
UTF-8 的話最通常的方法還是讀成 char 陣列之後再去解碼
04/19 07:07, 6F

04/19 07:07, , 7F
到這時可能會經由一些手段轉成 wchar_t, 但並不是直接讀入
04/19 07:07, 7F

04/19 07:08, , 8F
再者你的後續問題「依照標點符號」, 你的那些標點符號的指定
04/19 07:08, 8F

04/19 07:09, , 9F
也要小心, 不然很有可能即使正確讀進來了但還是切不開
04/19 07:09, 9F

04/19 09:55, , 10F
UTF8每個字是1~6個bytes,你要自己偵測,自己切割
04/19 09:55, 10F

04/19 11:23, , 11F
之前有試著做也是大失敗...字不一樣長不知道有沒有LIB可用
04/19 11:23, 11F

04/19 13:29, , 12F
編譯器版本如果夠新可以試試 http://goo.gl/xn9lLo
04/19 13:29, 12F

04/19 17:27, , 13F
code看起來跟UTF-8沒什麼關係啊,不過locale為什麼要設成
04/19 17:27, 13F

04/19 17:27, , 14F
空的? 試試UTF-8的locale? 如果你要切的標點符號是ASCII
04/19 17:27, 14F

04/19 17:28, , 15F
的話,那也不用特別處理,普通的strtok/strsep都可以
04/19 17:28, 15F

04/19 17:29, , 16F
你只要弄對locale確保資料傳得過那一層就好了
04/19 17:29, 16F

04/21 11:46, , 17F
04/21 11:46, 17F

04/21 11:46, , 18F
04/21 11:46, 18F
文章代碼(AID): #1JKNB3pi (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
問題
5
18
文章代碼(AID): #1JKNB3pi (C_and_CPP)