QString与std::string、char*之间的转换

1 开发环境:

    Win8.1(64 bit)

    Qt 5.2.1

    Qt Creator 3.0.1

2 QString->std::string

    QString有转换到std::string的函数( toStdString() ),然而当QString中包含中文时,使用此方法会出现乱码。根据参考资料[3]的说明,可以使用下面的转换方式:

QString strQ("可可西");
std::string strStd = strQ.toStdString();
QTextCodec *code = QTextCodec::codecForName("gb18030");

// 如果code为0,表示在运行的机器上没有装gb18030字符集。
// 不过一般的中文windows系统中都安装了这一字符集
if (code)
    strStd= code->fromUnicode(strQ).data();

3 QString->std::string->char*

    根据参考资料[1]的说明,可以先将QString转换为std::string,然后再转换为char*:

QString filePath;
std::string strFileName = filePath.toStdString();
const char* cFileName = strFileName.c_str();

    缺陷:经过测试发现,当QString中存在中文时,会出现乱码,这时候如果使用cFileName作为文件名打开文件会出错。解决方法:

filePath.toLocal8Bit()

    使用上述的转换可以当作文件名,可以成功打开。

4 char* -> QString

    根据参考资料[4]的说明,char*中是否包含中文字符的转换方式有所差异:

(1)如果char*中没有中文字符

char *ch = "abcd";
QString strzw(ch);
# or
strzw = ch;

(2)如果char*中含有中文字符

char *ch = "abcd中国";
QString strzw = QString::fromLocal8Bit(ch);

参考资料

[1]Qt下 QString转char*

[2]QString 和std::string互转

[3]QString和string互转中文字符

[4]Qt5中char*和QString的互转问题

[5]QT——解决读取/保存文件含有中文路径的问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值