私はユニコード/ワイド文字を扱っており、toString メソッド ( Java ::toString equiv ) を作成しようとしています。ostream はワイド文字を処理しますか?もしそうなら、それが Unicode であることをストリームの消費者に警告する方法はありますか?
1447 次
2 に答える
3
ostream
C++ の他の部分も、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 に答える