5

私はユニコード/ワイド文字を扱っており、toString メソッド ( Java ::toString equiv ) を作成しようとしています。ostream はワイド文字を処理しますか?もしそうなら、それが Unicode であることをストリームの消費者に警告する方法はありますか?

4

2 に答える 2

3

ostreamC++ の他の部分も、Unicode についても何も知りません。通常、C++ で文字列変換を次のように記述します。

template<typename Char, typename Traits>
std::basic_ostream<Char, Traits>&
operator<<(std::basic_ostream<Char, Traits>& stream, const YourType& object) {
    return stream << object.a << object.b;  // or whatever
}

Unicode のようなものを取得するかどうかは、実装次第です。C++ のストリームは Java の意味でのテキスト ストリームではなく、C++ の文字列は Java の意味での文字列ではありません。実際の Unicode 文字列が必要な場合は、ICU ライブラリを参照してください。

于 2010-07-19T14:52:42.007 に答える
0

ワイド文字列は移植性がないため、C++ では避けることをお勧めします。プラットフォームによっては、UTF-16、UTF-32、または非 Unicode の場合もあります。

C++ での一般的なアプローチは、UTF-8 でエンコードされたマルチバイトchar文字列を内部で使用し、必要に応じてシステム境界でトランスコーディングを行うことです。Linux や macOS などの最新のシステムのほとんどは UTF-8 でうまく機能するため、それらを出力ストリームに渡すことが機能します。古いコード ページがあるため、Windows が最も問題があります。移植可能な UTF-8 出力には、 Boost Nowideまたは{fmt} ライブラリを使用できます。

免責事項: 私は {fmt} の作成者です。

于 2020-12-16T16:47:40.063 に答える