• 5826阅读
  • 11回复

[提问]编码转义 [复制链接]

上一主题 下一主题
离线aason
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-24
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
& # 31614; & # 25253; 这种编码怎样转换为汉字?
离线XChinux

只看该作者 1楼 发表于: 2013-01-24
    QString str = XXXX ; // 假设这里就是&#xxxx;&#xxxx格式的字符串

    QRegExp reg("\\&\\#\\d+;");
    int pos = 0;
    int len = 0;
    QString strCh;
    while ((pos = reg.indexIn(str, pos)) != -1)
    {
        len = reg.matchedLength();
        strCh = str.mid(pos + 2, len - 3);
        str.replace(pos, len, QChar(strCh.toInt()));
        pos++;
    }
    qDebug() << str;
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 2楼 发表于: 2013-01-24
又学到新的姿势了,mark一下
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线aason

只看该作者 3楼 发表于: 2013-01-25
回 1楼(XChinux) 的帖子
对哦,可以使用正则来实现

谢谢!
离线realfan

只看该作者 4楼 发表于: 2013-01-25
正则表达式是个好东西,就是用得不熟。学习了
离线ppdayz

只看该作者 5楼 发表于: 2013-01-25
mark
离线roywillow

只看该作者 6楼 发表于: 2013-01-25
回 1楼(XChinux) 的帖子
不过如果遇到了这种转义和汉字等字符共存的情况时怎么写呢……正则用不熟练啊
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线XChinux

只看该作者 7楼 发表于: 2013-01-25
Re:回 1楼(XChinux) 的帖子
引用第6楼roywillow于2013-01-25 10:42发表的 回 1楼(XChinux) 的帖子 :
不过如果遇到了这种转义和汉字等字符共存的情况时怎么写呢……正则用不熟练啊

我写的那个就可以的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 8楼 发表于: 2013-01-26
回 7楼(XChinux) 的帖子
啊确实如此
不过我怕想起了之前我写过的一个程序
需要把字符串中的字符一个一个拿出来,按照一个表转换为对应的代码
其中有一些以方括号括起来、\转义的一些需要作为一个部分来处理
曾经想过用正则,但是不知如何下手
因为得把其中的字符一个一个拿出来,而不是直接把转义的部分替换为实体,似乎我得获得每一个“字符”的index和length。老大的那段正则能做到吗?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线XChinux

只看该作者 9楼 发表于: 2013-01-26
可以的。正则表达式 "&#\d+;"  这一段就表明了以"&#"开头,然后跟着不少于一个的连续数字字符,然后以";"结尾。

当然了,有可能取出来的中间的连续字符,根本就不是合法的unicode编码数字,此是要靠那个QChar类型来判断是否合法,如果不合法,那这个就不转换了。跳过继续下一个。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 10楼 发表于: 2013-01-26
回 9楼(XChinux) 的帖子
似乎我没表达清楚……
我是想在混排的字符串中即能找出那些单个字符的index和length,也能找出转义的部分
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 11楼 发表于: 2013-01-26
试着用regexbuddy调试了一下,发现大概“(\[.+\])|((\\h[0-9a-fA-F]{2})|(\\n))|.|\n”能满足,不过qt文档中“.”好像说也能匹配换行符?
不好意思跑题了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
快速回复
限100 字节
 
上一个 下一个