• 5295阅读
  • 9回复

[提问]关于串口传送中文 [复制链接]

上一主题 下一主题
离线lvhuat
 
只看楼主 倒序阅读 楼主  发表于: 2013-01-04
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
    QTextCodec *codec = QTextCodec::codecForName("GB2312");
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
    //我做的是一个针式打印机串口,实现可输入字符串,打印中文,但是总出现乱码
    //一.这种方式,串口传送正确,但是没办法应用
    QByteArray inPut = ui->printEdit->toPlainText().toAscii();
    printCom->write(toPrint);

    // 一.这种方式,串口传送总是乱码,直接函数传递char* 这是我想要的
    char * data = "to123我的中国";
    QString str(data);
    QByteArray toPrint = str.toAscii();
    printCom->write(toPrint);

请教的问题,怎么才能直接传递一个char*类型的,写入串口从而使打印不乱码?
离线lvhuat
只看该作者 1楼 发表于: 2013-01-04
难道没人能解决呀。求助呀
离线realfan

只看该作者 2楼 发表于: 2013-01-04
你试试用其它串口通讯工具,给打印机发你要的字符串,看能不能正常打印。
确认打印机是否支持中文
离线lvhuat
只看该作者 3楼 发表于: 2013-01-04
我去对照了GBK 字符编码
发现"一" 是B2BB,如果我用”\xB2\XBB“ 写过去,发现完全没有问题。

但是我用QTextCodec::设定为GBK的时候
但是写过去的总是E4B8这么坑爹的编码是谁做的呀?
离线realfan

只看该作者 4楼 发表于: 2013-01-04
回 3楼(lvhuat) 的帖子
你用的是
QTextCodec *codec = QTextCodec::codecForName("GB2312");

不是GBK呀,改成GBK试试呢
离线roywillow

只看该作者 5楼 发表于: 2013-01-04
永远不要尝试在代码中使用中文
除非你完全明白那两行codec的意思
可以用text edit来输入中文,然后明确的调用gb的textcodec进行转码
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wjlsmail

只看该作者 6楼 发表于: 2013-01-04
楼上说的有道理。
我也遇到类似情况:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));

QlineEdit中录入中文,转化为GB2312码,写入设备显示无误;如果在代码中写中文硬码或者从配置文件中读取中文,都不能正确显示:乱码或缺字。
离线lvhuat
只看该作者 7楼 发表于: 2013-01-05
回 4楼(realfan) 的帖子
UTF-8
GB2312
还有剩下的中文编码都试过,都没有对上号的。
各位:问题基本已经定位,主要是QT下面的中文编码在解析的时候总是解析成为错误的编码。
这点 精灵王 @roywillow 给了正确的回答,感谢。
离线realfan

只看该作者 8楼 发表于: 2013-01-05
回 7楼(lvhuat) 的帖子
那你就自己做个映射吧,网上现成的GBK码表下载一份,把QT中的中文转成标准的GBK码,再发到串口。
离线lvhuat
只看该作者 9楼 发表于: 2013-01-06
回 8楼(realfan) 的帖子
这是一个好主意
快速回复
限100 字节
 
上一个 下一个