【问题标题】:QString::fromUtf8(str) and \u encoded character sequencesQString::fromUtf8(str) 和 \u 编码的字符序列
【发布时间】:2016-10-12 17:19:09
【问题描述】:

我使用带有\u 编码序列的字符串文字,将它们传递给QString::fromUtf8,就像在QString::fromUtf8("Precio (\u20AC/k)"); 中一样,成功了,但是,我有点挣扎,阅读cppreference 和其他来源,我没有清楚\u20AC 序列是如何翻译成二进制的。

换句话说,QString::fromUtf8 接收什么来代替\u20AC 序列? 20AC 代码点的 UTF-8 表示?它的 UTF-16 表示?还是什么?

我读过的大多数资料都说它被翻译成它的 UTF-16 表示,这意味着我在将该字符串传递给 fromUtf8 时做错了,但是,它一直运行良好。

我在做正确的事吗?

【问题讨论】:

    标签: c++ encoding utf-8 qstring


    【解决方案1】:

    无前缀字符串文字"..." 的编码是实现定义的。在许多非 Windows 编译器上,它默认为 UTF-8,尽管有时可能会更改;对于 GCC,此开关为 -fexec-charset (docs)。

    为了获得独立于执行字符集的字符串文字的 UTF-8 编码,C++11 引入了u8"..." (cppreference)

    【讨论】:

    • 即使没有 Unicode 转义序列?那么,像"hello" 这样的纯 ASCII 无前缀文字字符串可以进行 UTF-16 编码吗?
    • @Peregring-lk 不,UTF-16 不允许作为执行字符集的多字节编码。它可以用作广泛:wchar_t 为 16 位的奇怪编译器 (Visual Studio) 可能会将其用作 L"hello" 的编码
    • 好的,那么,无前缀字符串文字的编码可能取决于它们的内容,不是吗?如果一个字符串只包含执行字符集,它是 ASCII 编码的(= UTF-8,= ISO-8859-1 等),但如果它包含其他字符,这些特定字符串的编码是实现定义的。不是吗?
    • @Peregring-lk 不,它不依赖于内容,它是所有字符串文字的一个命令行选项。
    • @Peregring-lk 不确定您所说的“基于 ASCII”是什么意思,但两个限制是:基本字符集的所有 96 个字符都有单字节表示和 '0'-'9'按此顺序出现,因此您可以c-'0'
    猜你喜欢
    • 2019-10-12
    • 2020-11-18
    • 1970-01-01
    • 2013-06-08
    • 2015-10-21
    • 2018-05-05
    • 2018-04-15
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多