コードページ437のコーデックを作成しようとしています。私の計画は、ASCII文字を通過させ、utf-16値をキーとして使用して、テーブル内の残りの128文字をマップすることでした。
一部の組み合わせ文字(ドット、チルダなどの文字)の場合、文字は2つのQ文字を占有しているように見えます。
プログラムへの引数の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バイトであるため、1つのオブジェクトに上記の文字の値を保持できるはずです。QStringが2つのQCharを使用するのはなぜですか?結合されたUnicode値を取得するにはどうすればよいですか?