[问题] 读取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