【发布时间】:2016-03-06 08:18:53
【问题描述】:
尝试将一些数据从 CSV 插入 Qt 中的 Firebird 表。 DB 是 ASCII 格式。插入一些带有非 ascii 符号的字符串时会出错:
无法在字符集之间音译字符
设置 QSqlDatabase::setConnectOptions("ISC_DPB_LC_CTYPE=UTF8;") 并将列转换为 UTF8 (CHARACTER SET UTF8) 没有帮助 - 同样的错误。尝试抑制 unicode 字符也没有运气:
QTextCodec *codec = QTextCodec::codecForName("latin1");
QByteArray encodedString = codec->fromUnicode(str);
str = QString(encodedString);
QString::toLatin1 () 也不会抑制字符。这里有什么解决方案?
【问题讨论】:
-
奇怪,
ALTER TABLE <tablename> ALTER COLUMN <column> TYPE VARCHAR(x) CHARACTER SET UTF8没有改变列字符集,仍然是 ASCII。 -
QString已经在 utf-16 中,您的转换将删除所有非 7 位 ascii 字符并且它没用。 FireBird 的输出数据类型是什么?显示代码,第一次填写str的方式。 -
对不起,我不清楚,你想实现什么?您需要剥离所有非 ASCII 字符吗?你在找doc.qt.io/qt-5/qstring.html#toLatin1 吗?
-
我有 Qt 4,但它不起作用 - 不抑制字符,
toAscii()和toLatin()也不起作用。 -
查询:
INSERT INTO RXNORM_INGREDIENTS (RXCUI, RXAUI, STR) VALUES ('151513', '2355753', 'CinaziГЁre')数据库文本:算术异常、数字溢出或字符串截断 - 无法在字符集之间转写字符驱动程序文本:无法执行查询
标签: qt unicode firebird qstring latin