2010-11-22 8 views

答えて

14

std::wstringは、wchar_tのコンテナです。 wchar_tのサイズは指定されていません - Windowsコンパイラは16ビットタイプのUnixコンパイラを使用する傾向があります。

UTF-16は、16ビット整数のシーケンスでUnicodeコードポイントのシーケンスをコード化する方法です。

BMPの外部に文字を含まないワイド文字リテラル(たとえばL"Hello World")を使用すると、Visual Studioを使用するとUTF-16になりますが、大部分は2つの概念には関係ありません。 BMP以外の文字を使用すると、std::wstringwchar_tが16ビットであっても、surrogate pairsをUnicodeコードポイントに変換しません。

+0

Windowsオペレーティングシステムで使用されている場合、std :: wstringはBMP以外のユニコード文字のUTF-16と同じであることを意味しますか? – hkBattousai

+6

いいえ、std :: wstringは単なる整数のコンテナです。コンテナのエンコーディングは、コンテナに挿入するデータに完全に依存します。 –

+1

+1:UTFに慣れていない人にとっては、BMPを定義することが賢明かもしれません。 –

2

UTF-16は、16バイトの要素で表されたテキストの概念であるが、実際のテキストの文字が1

要素よりもSTDから構成されてもよい:: wstringのは、これらの要素の単なる集合体であり、主にクラスでありますそれらの記憶に関係する。

wstringの要素wchar_tは少なくとも16ビットですが、32ビットにすることもできます。

+0

例を挙げるともっと詳しく説明できますか?たとえば、文字 'A'は "0x0041"のようにstd :: wstringに格納されます。どのようにUTF-16形式で保存されますか? – hkBattousai

+7

16 - **バイト**?それはハードコアの文字コード – Inverse

+2

です@Inverse:誰もがASCIIを使用する必要がありますので、メモリの使用についてはあまり悲しんではありません;) –

6

UTF-16は、特定のUnicodeエンコーディングです。 std::wstringは、各文字を格納する基本型としてwchar_tを使用する文字列の実装です。対照的に、規則的なstd::stringcharを使用します。

で使用されるエンコーディングは、必ずしもUTF-16である必要はありません。たとえば、UTF-32でもかまいません。

+2

また、UCS-2やS-JIS、Big 5などとすることもできます。 – greyfade

関連する問題