OracleデータベースからUnicode文字を含む場合と含まない場合があるデータ文字列をC++プログラムに読み込みます。データベースには、Unicode文字(UTF-8)が含まれています。Unicode文字が存在する場合は、16進形式に変換して表示する必要があります。Unicode文字をC++の16進コードで表示する方法
答えて
この質問には2つの側面があります。
通常のASCII文字とUTF-8エンコード文字を区別します。
UTF-8は、127より高い任意のコードポイントを2つ以上のバイトの系列としてエンコードします。 127以下の値は変更されません。エンコーディングの結果のバイトも127より高いので、バイトの上位ビットを調べて、それが適格かどうかを調べるだけで十分です。
エンコードされた文字を16進数で表示します。
C++には、ストリームに16進数で数値を書式設定するように指示するための
std::hex
があります。std::showbase
を使用すると、出力をきれいに見せることができます。ただし、char
は数値として扱われません。ストリームは文字を印刷します。値を別の数値型(たとえば、int
)にする必要があります。しかし、記号拡張に注意してください。ここで
は実証するいくつかのコードです:
#include <iostream>
void print_characters(char const* s)
{
std::cout << std::showbase << std::hex;
for (char const* pc = s; *pc; ++pc) {
if (*pc & 0x80)
std::cout << (*pc & 0xff);
else
std::cout << *pc;
std::cout << ' ';
}
std::cout << std::endl;
}
あなたはこのようにそれを呼び出すことができます。日C++ 5.8を使用するSolaris 10上の
int main()
{
char const* test = "ab\xef\xbb\xbfhu";
print_characters(test);
return 0;
}
出力:
$ ./a.out a b 0xef 0xbb 0xbf h u
コードはUTF-8でエンコードされた文字を検出し、それを解読する努力はしません。あなたはそれをする必要はないと言いました。
私は*pc & 0xff
を使用して、式を整数型に変換し、符号拡張ビットをマスクアウトしました。それがなければ、私のコンピュータの出力は0xffffffbb
でした。
こんにちはRob、 私は取った文字列がUnicode文字の16進形式を含むが、私のデータベースにはUnicode文字が含まれていると言うことができますアラビア語私はアラビア語で存在する文字を16進文字に変換したいと言う。 ex:char * test = "مرحبا" "مرحبا"のヘキサフォーマットを出力したい。 –
あなたはその点を見逃しています。ただし、文字列を文字列に変換することはできますが、必要に応じて文字列を取得できます。それがデータベースのものなら、それでは。文字列に文字を入れたら、ASCII以外の文字を検出してUTF-8バイトを16進形式で表示するようなコードを使用できます。私は、文字列の内容を検出してその中に文字を入れることの違いを強調したいと考えてコードを編集しました。私の文字列リテラルは、文字列にテスト可能なものを置く簡単な方法でした。 –
文字列をUTF-32に変換します(これはUTF CPPと非常に簡単です)。結果の文字列をループし、0x7F以上のコードポイント(文字)を検出して印刷します。ヘックスとして。
- 1. JavaのUnicodeの16進数文字列
- 2. UTF-16 16進コードを絵文字に変換する方法
- 3. MySQLのUnicode(16進)文字リテラル
- 4. C++で16進文字列を作成して表示する
- 5. 16進Unicode文字を視覚的表現に変換する
- 6. 文字列のUnicode 16進値を出力する
- 7. C++で16進文字配列を文字列に変換する方法は?
- 8. UDFで文字列を16進数で表示する
- 9. 16進数の文字で表現された16進数
- 10. Pythonで16進文字列を表示する
- 11. VB.NETで16進コードポイントをUnicode文字に変換
- 12. Unicode 16進数「0x20000」の文字列表現をJavaのintコードポイント0x20000に変換する方法
- 13. 文字列を16進数と16進数に変換する方法は?
- 14. 文字列を16進数で16進数に変換する
- 15. 10進文字列で表される64ビット整数を16進文字列に変換する方法
- 16. 16進文字列から16進文字列への変換
- 17. 16進コードをテキストに変換するC#16進文字列が他のページと異なる
- 18. uint_64の16進表現を16進数の符号なし文字配列にコピーする方法は?
- 19. C#で16進文字列の値を2倍に変換する方法は?
- 20. 16進数の文字列表現
- 21. Unicode PHP用の16進コードポイント
- 22. ビジュアルスタジオテキストビジュアライザでUnicode制御文字を表示する方法は?
- 23. Java SwingでUnicode文字を表示する方法
- 24. Visual StudioでUnicode文字を表示する方法は?
- 25. JavaでUnicode文字を表示する
- 26. PHPで16進UTF-8文字を印刷する方法
- 27. C++でunicode文字を大文字に変換する方法
- 28. Javaの16進文字列のデータベースファイルをスキャンする方法
- 29. C#intを16進数の文字列に変換する方法
- 30. cursesを使ってUnicode文字を表示する方法は?
問題は何ですか?どのコードを既に使用していますか? –
ASCII以外のものをすべて破棄したい場合は、バイトをループして、highrstビット(thechar&0x80!= 0)が設定されているものをすべて破棄します。しかし、UTF-8でエンコードされた文字列を直接表示できないのはなぜですか? – nos