Qt query.value返回错误的chars(char encoding) [英] Qt query.value return wrong chars (char encoding)

查看:629
本文介绍了Qt query.value返回错误的chars(char encoding)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据库字段,其字符串类似PRODUCT N°1:

I have a database field with string like "PRODUCT N°1" when do:

QString name = query.value(PRODUCT_INDEX_NAME).toString()

我得到:PRODUCT N?程度符号丢失了。

I get: "PRODUCT N?1". Degree symbol was lost.

我认为是一个字符编码问题。如何修复?

I think is a char encoding problem. How can fix ?

更多信息:


  • 数据库是Visual FoxPro

  • 通过QODBC执行查询

  • 当在dos视图字符串中使用dbfViewer打开数据库时

显示为PRODUCT N|1,在Windows视图中正确显示为PRODUCT N°1 b query.value(PRODUCT_INDEX_NAME).toByteArray()是:

Output of: query.value(PRODUCT_INDEX_NAME).toByteArray() is:

    "PRODUCT N?1  " QByteArray
    [0] 80 'P'  char
    [1] 82 'R'  char
    [2] 79 'O'  char
    [3] 68 'D'  char
    [4] 85 'U'  char
    [5] 67 'C'  char
    [6] 84 'T'  char
    [7] 32 ' '  char
    [8] 78 'N'  char
    [9] 63 '?'  char
    [10]49 '1'  char

如上所示,内部char'°'已经转换为字节63('?'),所以试试下面的'webclectic' 。

As seen above internally char '°' is already converted to byte 63 ('?') so trying as suggested below by 'webclectic' don't works anyway.

推荐答案

可以使用 QByteArray 中的值,然后使用请修改 QTextCodec 以将其转换为 QString 。例如,如果编解码器是Windows-1250,您可以这样做:

You can take the value in QByteArray and then use the correct QTextCodec in order to transform it to a QString. For example if the codec was Windows-1250 you could do:

QTextCodec* windows1250Codec = QTextCodec::codecForName("Windows-1250");
QString name  = 
   windows1250Codec->toUnicode(query.value(PRODUCT_INDEX_NAME).toByteArray());

检查 QTextCodec 文档了解更多信息和可用编解码器列表。

Check the QTextCodec documentation for more info and for a list of available codecs.

这篇关于Qt query.value返回错误的chars(char encoding)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆