我正在尝试为Code page 437编写编解码器。我的计划是只传递 ASCII 字符并将剩余的 128 个字符映射到一个表中,使用 utf-16 值作为键。
对于某些组合字符(带点的字母、波浪线等),该字符似乎占据了两个 QChar。
打印程序参数的 utf-16 值的测试程序:
#include <iostream>
#include <QString>
using namespace std;
void print(QString qs)
{
for (QString::iterator it = qs.begin(); it != qs.end(); ++it)
cout << hex << it->unicode() << " ";
cout << "\n";
}
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i++)
print(QString::fromStdString(argv[i]));
}
一些输出:
$ ./utf16 Ç ü é
c3 87
c3 bc
c3 a9
我曾预料到
c387
c3bc
c3a9
尝试了 QString 中可用的各种规范化形式,但没有人的字节数比默认值少。
由于 QChar 是 2 个字节,它应该能够将上述字符的值保存在一个对象中。为什么 QString 使用两个 QChar?如何获取组合的 unicode 值?