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:

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

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

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

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

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

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

    ReplyDelete
  5. > char utf8[] = u8"あ" ;

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

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

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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.