2010-04-22

C++0x本:求む、簡単なBMP外の文字

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に詳しい人。

6 comments:

bleis-tift said...

つちよしなんてどうでしょうか?
http://d.hatena.ne.jp/bleis-tift/20090516/1242478538

ほかにも、叱るとか。下の資料の 88 ページ目にあります。
http://cid-c562dfdeb23518f0.skydrive.live.com/self.aspx/.Public/SQL%7C_Puzzlers.pdf

江添亮 said...

𠮷(U+020bb7)は悪くありませんね。これでいこうかな。

Anonymous said...

http://ja.wikipedia.org/wiki/%E3%81%98%E3%82%87
U+25771はどうでしょうか

江添亮 said...

これもいいですね。
数の単位なので、𠮷より一般的だ。

しかし、この字は知らなかった。
私が昔読んだ、物の本には、ただしく、秭(し、U+79ED)が使われていたので、それで覚えているのです。

Anonymous said...

> char utf8[] = u8"あ" ;

基本的なことでお恥ずかしいのですが、このコードを書いたファイル自体も
UTF-8で保存されていなければいけないのですよね?

それとも、例えば、u8"あ"の"あ"の部分をShift JISで書いて保存した場合でさえも、
utf8という変数は { 0xe3, 0x81, 0x82, 0x00 } で初期化されるのでしょうか?

江添亮 said...

ソースコードの文字セットは、規格の定義するところではありません。
お使いのコンパイラのマニュアルを参照してください。