C++0xでは、ユニバーサルキャラクターセットがサポートされる。
たとえば、UTF-8の場合、以下のコードと、コメント内のコードは、まったく同じ意味である。
// char utf8[] = { 0xe3, 0x81, 0x82, 0x00 } ; char utf8[] = u8"あ" ;
今書いている本は、C++0xを解説することが目的なので、UTFのエンコードの詳細については、説明しない。ただ、このように例を示せば、興味のある人は、さらに深く調べるだろう。
UTF-16や、UTF-32の場合は、以下のようになる。
// char16_t utf16 = { 0x3042, 0x0000 } ; char16_t utf16[] = u"あ" ; // char32_t utf32 = {0x00003042, 0x00000000 } ; char32_t utf32[] = U"あ" ;
できれば、UTF-16にも、サロゲートペアを使う例を示したい。しかし、都合のいい文字が思いつかない。なにか、うまいBMP外の文字があれば、教えて欲しい。
もちろん、BMP外の文字であれば、何でもいいわけだが、例なので、分かりやすい、印字可能な文字のほうがいい。見た目に単純な文字とか、日本人にとって馴染みのある文字であることが望ましい。さらに、Windows 7とか、多言語をサポートしたとあるLinuxのディストリなどで、デフォルトでその文字を表示できることが、望ましい。つまり、その環境で、必要なフォントなどが、最初から用意されている必要がある。
ともかく、実用的にパっと思いつくのは、Supplementary Ideographic Planeにある、まず日常生活で使わない、古い漢字とか、ありえない組み合わせのハングルとかの文字なのだが。
教えて、Unicodeに詳しい人。
つちよしなんてどうでしょうか?
ReplyDeletehttp://d.hatena.ne.jp/bleis-tift/20090516/1242478538
ほかにも、叱るとか。下の資料の 88 ページ目にあります。
http://cid-c562dfdeb23518f0.skydrive.live.com/self.aspx/.Public/SQL%7C_Puzzlers.pdf
𠮷(U+020bb7)は悪くありませんね。これでいこうかな。
ReplyDeletehttp://ja.wikipedia.org/wiki/%E3%81%98%E3%82%87
ReplyDeleteU+25771はどうでしょうか
これもいいですね。
ReplyDelete数の単位なので、𠮷より一般的だ。
しかし、この字は知らなかった。
私が昔読んだ、物の本には、ただしく、秭(し、U+79ED)が使われていたので、それで覚えているのです。
> char utf8[] = u8"あ" ;
ReplyDelete基本的なことでお恥ずかしいのですが、このコードを書いたファイル自体も
UTF-8で保存されていなければいけないのですよね?
それとも、例えば、u8"あ"の"あ"の部分をShift JISで書いて保存した場合でさえも、
utf8という変数は { 0xe3, 0x81, 0x82, 0x00 } で初期化されるのでしょうか?
ソースコードの文字セットは、規格の定義するところではありません。
ReplyDeleteお使いのコンパイラのマニュアルを参照してください。