問題タブ [qchar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - QChar は、乗算記号 '×' の負の Latin1 コードを格納します。
乗算記号 の Latin1 コードを取得したいのですが、×
内部の値を確認するQChar
と-41'×'
.
私のコード:
デバッグすると、2 行目にQChar
値が表示されます-41'×'
。
コードを変更しました:
しかし、私はむしろ 215 という値を取得し、158 を期待しています。
c++ - UTF-8 バイト配列から次の 1 文字だけを効率的に変換する方法は?
私は動作するこのコードを持っています:
bp
は でありQByteArray::const_pointer
、はUTF ut
-8 でエンコードされた Unicode コードポイントの予想される最大長です。QChar c
次に、から最初のものを取得しQString qs
ます。QChar
任意の量のQByteArray
を aに変換しQString
てから最初の のみを取得することなく、UTF-8 バイト配列から単純に次のもののみを取得する、より効率的な方法があるはずQChar
です。
編集以下のコメントから、私の質問をまだ誰も理解していないことは明らかです。だから私はいくつかの基本から始めます。UTF-8 と UTF-16 は、世界標準の Unicode の 2 つの異なるエンコーディングです。インターネットおよび Unicode テキスト ファイルを介して転送するための最も一般的で推奨される Unicode エンコーディングは UTF-8 であり、UTF-8 エンコーディングで 1 ~ 4 バイトを使用するすべての Unicode コードポイントになります。一方、UTF-16 は、プログラム内で文字を処理する場合により便利です。したがって、世の中に出回っているソフトウェアの大部分は、これら 2 つのエンコーディングの間で常に変換を行っています。QChar は、0x00 から 0xffff までのすべての Unicode コードポイントのより便利な UTF-16 エンコーディングであり、これまでに定義され、一般的に使用されている言語と記号の大部分をカバーしています。サロゲート ペアは、より高い Unicode コード ポイント値に使用されます。
テキスト ファイルを に読み込むとQPlainTextEdit
、変換は自動的にバックグラウンドで行われます。aQString
から aを読み取るQByteArray
ことも自動的に行うことができます (ロケールとコーデックの設定が UTF-8 に設定されている場合)、または上記のコードのように toUtf8() または fromUtf8() を使用して明示的に行うことができます。
他の方向への変換は、次のコードを使用して、暗黙的 (舞台裏) または明示的に効率的に行うことができます。
また
どこba
にQByteArray
とsi
がありQString::const_iterator
ます。これらはまったく同じことを行います (コーデックが UTF-8 に設定されていると仮定します)。どちらも、次の ( 1 ) 文字を、指定された から にQChar
変換し、QString
その結果、 に 1 つ以上のバイトが追加されba
ます。
私がやろうとしているのは、一度に1文字だけを効率的に逆変換することです。内部的には、これは変換されるすべての文字に対して行われており、非常に効率的に行われていると確信しています。
問題QString::fromUtf8(p,n)
は、変換する文字数ではなく、処理するバイトn
数です。したがって、3 (実際にサロゲート ペアを処理する場合は 4) になる可能性のある最大バイト数を考慮する必要があります。したがって、次の文字だけが必要な場合は、数バイトを処理する準備ができている必要があります。結果が複数の文字である場合、それらは変換されてから破棄されます。QString
Q: これを1 文字ずつ変換する関数はありますか?