0

乗算記号 の Latin1 コードを取得したいのですが、×内部の値を確認するQChar-41'×'.

私のコード:

QString data = "×";
QChar m = data.at(0);
unsigned short ascii = (unsigned short)m.toLatin1();

デバッグすると、2 行目にQChar値が表示されます-41'×'

コードを変更しました:

unsigned int ascii = c.unicode();

しかし、私はむしろ 215 という値を取得し、158 を期待しています。

4

2 に答える 2

4

Unix システムを使用しているかどうかを×確認するとわかるように、乗算記号は ASCII 記号ではありません。man ascii

その値はエンコーディングによって異なります。UTF 表現については、こちらを参照してください。たとえば、UTF-8 では、0xC3972 バイトの値があります。私がリンクしたユニコードページで言及されているように、215はこの文字をUTF-16エンコーディングで表す10進値であり、これがc.unicode()返されます。なぜ158を期待するのかわかりません。

ただし、ASCII 乗算記号があり*ます。

于 2015-06-23T19:07:07.807 に答える
1

Latin1 code tableを確認すると、× 実際に 215 または -41 としてエンコードされていることが明らかです。Qt は正しい結果を提供しています。

あなたの間違いは:

  1. Latin1 が ASCII と同等であると仮定します。Latin1 には ASCII が含まれているだけですが、スーパーセットです。ASCII よりも 2 倍多くのコードを定義します。

  2. ×ASCIIで表現されていると仮定します。そうではない。

Latin1 でエンコードされたコード×が 158 であるべきだという考えをどこから得たのか、私にはわかりません。確かに、それは Latin1 コード表から来たものではありません! ちなみに、の Latin1 エンコーディングと UTF-8 エンコーディング×は同じです。

于 2015-06-24T18:36:32.550 に答える