Windows コンソールでの適切な UTF-8 文字の印刷
この記事は、Windows コンソールで UTF-8 文字を印刷しようとするときに直面する課題に対処することを目的としています。 Windows コンソール。
問題の説明
特定のコード スニペットを使用してドイツ語の文字を表示する際に問題が発生しました:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
出力コードページを UTF-8 に設定しているにもかかわらず、ドイツ語の文字は正しく印刷されません。
解決策
Unicode データを正しく印刷するにはWindows コンソールには、いくつかの使用可能な方法があります:
トラブルシューティング
3 番目の方法で出力が正しくない場合:
putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
これは、CP_UTF8 を使用する場合、コンソール API が別の呼び出しで渡されたデータを不正なエンコーディングとして解釈するためです。
これを解決するには、マルチバイト文字変換を正確に処理し、書き込み間の変換状態を維持する streambuf サブクラス。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3