GB2312编码十六进制字符串如何解析为QString

时间:2017-03-23 14:34:09

标签: qt

我有一个QString并使用GB2312将其转换为十六进制字符串:

QString temp = "我".toLocal8Bit().toHex().toUpper();

然后我得到temp = "CED2".

现在我想转换" CED2"到"我"。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

有一个用于字符转换的Qt类QTextCodec

QTextCodec::fromUnicodeQTextCodec::toUnicode

将数据保存为十六进制字符串根本不是一个好主意,我更喜欢QByteArray。但无论如何它是:

QString MyOrgStr(QByteArray::fromHex(QByteArray("CED2")));

我不确定您的源代码文档保存在哪种语言环境中。您调用此方法的方式必须在GB2312中,否则它将无法正常工作。

我建议像QTextCodec这样使用:

QTextCodec* c = QTextCodec::codecForName("GB18030");
if (c) {
    QString s = c->toUnicode("我");
    delete c;
} else {
    // Error, codec not installed
}

关于Qt文档,应在此处使用编解码器GB18030

  

GBK编解码器提供与中文的转换   GB18030 / GBK / GB2312编码。 GBK,正式中国内部法典   规格,是GB 2312-80的常用扩展。微软   Windows在名称代码页936下使用它。