異なるプラットフォーム (私の場合は Windows と Linux) でのエンコーディングの問題に直面しました。Windows では wchar_t のサイズは 2 バイトですが、Linux では 4 バイトです。wchar_t を両方のプラットフォームで同じサイズに「標準化」するにはどうすればよいですか? 追加のライブラリなしで実装するのは難しいですか? 今のところ、printf/wprintf API を目指しています。データはソケット通信で送信されます。ありがとうございました。
2 に答える
異なるプラットフォームやアーキテクチャ間で Unicode データを送信する場合は、UTF-8エンコーディングと (8 ビット)を使用することをお勧めしchar
ます。UTF-8 には、エンディアンの問題がないなどの利点があります (UTF-8 は単純なバイト シーケンスであり、代わりに UTF-16 と UTF-32 の両方がリトル エンディアンまたはビッグ エンディアンになる可能性があります...)。
Windows では、Win32 API の境界で UTF-8 テキストを UTF-16 に変換するだけです (Windows API は UTF-16 で動作する傾向があるため)。MultiByteToWideChar()
そのために API を使用できます。
この問題を解決するには、送信する前にすべての文字列を UTF-8 に変換する必要があると思います。Windows では、WideCharToMultiByte関数を使用して wchar_t 文字列を UTF-8 文字列に変換し、MultiByteToWideChar関数を使用して UTF- 8 文字列を wchar_t 文字列に変換します。
Linux では、物事は単純ではありません。関数wctombおよびmbtowcを使用できますが、それらが何に変換するか、何から何を変換するかは、基礎となるロケール設定によって異なります。したがって、これらを UTF-8 および Unicode との間で変換する場合は、ロケールが UTF-8 エンコーディングを使用するように設定されていることを確認する必要があります。
この記事も参考になるかもしれません。