楼主:
descent (“雄辩是银,沉默是金”)
2014-04-19 15:09:16c++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正确读入呢@@?
: 之后要能够支援依照标点符号切割成子字串..
: 请高手指点!
: 谢谢
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 16:00:00其实 QString 本身 dependecies 应该没有很多(不考虑locale 和 regex 之类有的没的东西的话), 说不定可以抽出来, 等有空来研究看看好了说真的 QString 应该是我看过最好的 C 相关 Unicode 实作
UTF-8并没有多复杂啊? 如果只是要正确断字,很简单就可以办到了,libchewing里面有个
http://0rz.tw/gNZJo如果是normalize/locale那块,那大概也是call ICU不是做在QT里面
楼主:
descent (“雄辩是银,沉默是金”)
2014-04-19 17:46:00有 qstring, 我才不想去用 icu, std::string 要是也能有 qstring 的能力, 那就太棒了
目测应该是永远不会有吧,std::string是char based
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 17:52:00std::string 根本只是 char array 的包装而已, 别肖想了
正确作法应该是extend std::string加上UTF-8 specific的function
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 17:54:00如果要有真正的 string abstraction 目标当然就不是 UTF8
不过这样效率也不好,真要处理字串还是解成wchar吧
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 17:55:00而已, 很多编码都有一些 quicks 要处理宽字符也不是万用解, 不要忘记 surrogatepairs 啊...
ㄟ 这就尴尬了 wchar有16bits也有32bits orz32bits的话就算万用了吧
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 18:04:0032-bit 应该是够用很长一段时间没错啦XD
目前有RFC 3629把上限挡在U+10FFFF应该够用完这辈子了(?)不对 他只挡了UTF-8的上限,没有说unicode不能超过虽然目前还没超过,范围内的空间也还绰绰有余就是了
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2014-04-19 18:13:00不过应该这辈子够用了, 之后反正肯定不是我维护没差(欸
楼主:
descent (“雄辩是银,沉默是金”)
2014-04-19 18:17:00两位大大对编码真熟悉
补充一下,U+10FFFF也是UTF-16 surrogate pairs的上限
作者:
LPH66 (-6.2598534e+18f)
2014-04-19 18:45:00我记得 unicode 就是因为 RFC 3629 挡住了才只定到 U+10FFFF唔, 应该反过来说, 因为 UTF-16 surrogate pairs 上限在那里才有 RFC 3629 出来把 UTF-8 挡住的..不然 UTF-8 原本是支援全部的 32-bit 编码空间的 (一直到 6 byte 长的编码)
无限期支持淘汰UTF-16!!!是个不上不下的东西啊…
作者:
donkeychen (Bad_To_The_Bone)
2014-04-21 11:37:00支持反对UTF-16 +1+1......之前在弄sqlite3时也有用过QString因为 SQLite Database Browser 的source code就放Qt的