windows QML奇怪的行为与西里尔符号

oxcyiej7  于 2023-08-07  发布在  Windows
关注(0)|答案(2)|浏览(132)

我正在经历非常奇怪的行为与西里尔字母。我使用的是Qt 5.12.6,Windows 10(64位)。
整个应用程序都是用QML编写的,正如你所看到的,有些单词没有任何意义,它们不是俄语。所有QML文本元素的行为都是错误的。


的数据
红色下面的顶部登录按钮看起来像这样

import QtQuick 2.7
import QtQuick.Controls 2.0

Button {
    id: loginPageButton
    font.capitalization: Font.AllUppercase
    checkable: true
    flat: true

    contentItem: Text {
        text: loginPageButton.text
        font: loginPageButton.font
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        elide: Text.ElideRight
    }
}

字符串
使用

LoginPageButton {
    id: newAccountButton
    text: qsTr("CREATE AN ACCOUNT")
    font.pixelSize: 16
    ButtonGroup.group: btnGroup
    checked: false
    Layout.alignment: Qt.AlignCenter | Qt.AlignVCenter
}


重新翻译是这样做的

QGuiApplication::removeTranslator(&m_currentTranslator);
bool isLoaded = m_currentTranslator.load(QString("tr_%1").arg(locale), QCoreApplication::applicationDirPath() + "/translations/");
if (isLoaded)
    QGuiApplication::installTranslator(&m_currentTranslator);
m_engine.retranslate(); // QQmlApplicationEngine


而且我不得不说这个bug只在一些机器上重现,而不是所有的...

mnemlml8

mnemlml81#

“”表示马其顿语。所以如果你想要俄语的话,你的字符串编码是错误的。
引用Qt文档:“应用程序可能偶尔需要默认本地8位编码以外的编码。例如,西里尔KOI 8-R语言环境(俄罗斯事实上的标准语言环境)中的应用程序可能需要以ISO 8859-5编码输出西里尔文。代码为:

QString string = ...; // some Unicode text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QByteArray encodedString = codec->fromUnicode(string);

字符串
要将Unicode转换为本地8位编码,可以使用快捷方式:QString::toLocal 8Bit()函数返回这样的8位数据。另一个有用的快捷方式是QString::toUtf 8(),它返回8位UTF-8编码的文本:这完美地保留了Unicode信息,同时如果文本完全是ASCII,则看起来像纯ASCII。
对于另一种方式的转换,有QString::fromUtf 8()和QString::fromLocal 8Bit()方便函数,或通用代码,通过从ISO 8859-5 Cyrillic到Unicode的转换来演示:

QByteArray encodedString = ...; // some ISO 8859-5 encoded text

QTextCodec *codec = QTextCodec::codecForName("ISO 8859-5");
QString string = codec->toUnicode(encodedString);


“(1

zz2j4svz

zz2j4svz2#

问题出在Roboto字体-我们把它换成了不同的字体,一切都恢复正常了。

相关问题