Qt 问题5:德国Umlaute(ä;,ö;,ü;char)和QString的问题

Qt 问题5:德国Umlaute(ä;,ö;,ü;char)和QString的问题,qt,Qt,我对Qt5、QStrings和像ä、ö和ü-char这样的德国Umlaute有问题。我读取1024字节头的数据,在我的应用程序中以表格的形式显示它,并编辑一些条目。每次我在QLineEdit中编写德语Umlaut并对其进行处理时,都会得到2个字节而不是1个字节,因为自Qt5以来,QString确实需要每个字符2个字节 我试过这个: QString str = rs_Position1_QLE->text(); QByteArray ba = str.toLatin1(); qDebug()

我对Qt5、QStrings和像ä、ö和ü-char这样的德国Umlaute有问题。我读取1024字节头的数据,在我的应用程序中以表格的形式显示它,并编辑一些条目。每次我在QLineEdit中编写德语Umlaut并对其进行处理时,都会得到2个字节而不是1个字节,因为自Qt5以来,QString确实需要每个字符2个字节

我试过这个:

QString str = rs_Position1_QLE->text();
QByteArray ba = str.toLatin1();
qDebug() << "ba:" << ba;
QString str=rs_Position1_QLE->text();
QByteArray ba=str.toLatin1();
qDebug()很少有可能:

  • 确保您的shell处理utf-8(如果
    echo-e'\xe2\x82\xac'
    命令未显示
    ,则应修复shell)
  • 确保在应用程序中正确处理UTF-8(在
    main()
    函数中添加这些行):

首先要了解的是,
QByteArray
只是一个字节的集合,它没有说明其内容或使用的编码,而
QString
是一个存储为UTF-16的unicode字符串

因此,当您执行
Content\u QLE->setText(qbaLine)
QString strLine=qbaLine
时,您隐式地将
QByteArray
转换为
QString
。根据,它调用
QString::fromUtf8()

因此,如果您的文件不是以UTF-8编码,而是以拉丁语1编码,那么您将遇到问题。 如果您的文件是拉丁文1,您应该执行以下操作:
Content\u QLE->setText(QString::fromLatin1(qbaLine))

编写文件时也是如此:

file.write(str.toUtf8()); // Write to a UTF-8 file
file.write(str.toLatin1()); // Write to a Latin 1 file

向我们展示你用来保存文件的代码。嗨,本杰明,很抱歉耽搁了——我已经写了一个小测试脚本。你可以在上面看到。非常感谢。RalfI认为这是不相关的-他试图将用户输入作为拉丁文1写入文件,而不是修复qDebug()输出。嗨,本杰明,非常感谢!我试着用fromLatin1来填写我的QLineEdit,结果它成功了!明天将尝试写入文件。。。谢谢
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
file.write(str.toUtf8()); // Write to a UTF-8 file
file.write(str.toLatin1()); // Write to a Latin 1 file