Qt query.value返回错误的chars(char encoding) [英] Qt query.value return wrong 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屋!