したいこと
C#でUnicode 第1面以上の文字を表示したい
調査結果
- 第1面以上は”\U00010280″のように、大文字の\Uを使用し、8桁の16進数で表現する。(先頭の0は省略不可)
- 第0面は”\U025A”のように、小文字の\uを使用し、4桁の16進数で表現する。
- 4桁,8桁の16進の数字の部分はコードポイント(スカラ値)という。
- \u,\Uは文字リテラルという。
- 面・区、対応しているフォントを選択する。
- 対応しているフォントのライセンスには注意する。
調査結果 その2(追記)
数値変数から変換する場合の注意点
- Convert.ToChar()は、4桁16進数(0-65535)の範囲までしか使用できない。(小文字\uの範囲)
- それ以上の場合は、Char.ConvertFromUtf32()を使用する。(大文字\Uの範囲)
詳細
Unicode対応フォントとライセンス
Unicode 8.0.0対応フォント一覧にも書かれていますが、実際にそのコードポイントが使用したいフォントで実装されていなければ、□のような形で表現されたりします。
Unicode文字からそれを表示できるフォントを探す方法というような方法もあります。
ライセンスは再配布できないものから、個人利用ならOKのもの、ソフト等への同梱ならOKなどというものものあり、注意した方がよいでしょう。
実際にやってみた
- WikipediaのUnicode一覧から、適当な文字を選択します。今回は参考で”U+10280″を選択。
- Unicode 8.0.0対応フォント一覧にも書かれいるコードポイントを実装しているフォントを探します。この場合、”U+10280″で、リキア文字。Quivira 4.1, 花園明朝A, Aegean 7.45 で実装されており、一番最初に目についたQuivira 4.1をダウンロード&インストールします。
- ちなみにQuivira 4.1のライセンスは、個人利用でFreeとUnicode 8.0.0対応フォント一覧のページには書れてますが英語を見てみると
free to use for any purpose, including commercial usage.
Using Quiviraとなっていますので、現時点(2018/5/29)では何の問題もなさそうです。フォントの変更もしませんし。(ただし、時間が経つと変わるかもしれませんので、使用される際は、実際にライセンス文を確認ください。)
- C# Formアプリ(クラシックデスクトップ)を新規作成して、ラベルとフォントダイアログを追加し、以下のようコードを書きます。大文字\Uで8桁の16進数に注意。
- リビルド&実行して、Quiviraフォントに変えてみると、意図したコードポイントが表示されてるのが分かります。
public Form1() { InitializeComponent(); string str = "\U00010280"; label1.Text = str; } private void button1_Click(object sender, EventArgs e) { DialogResult result = fontDialog1.ShowDialog(); if( result == DialogResult.OK) { label1.Font = fontDialog1.Font; } }
Char.ConvertFromUtf32()を使う
intの数値を元に、Convert.ToChar()で変換していたのですが、数値が0X10000になってから、OverflowExceptionが発生して難儀していました。検索をかけるて、Char.ConvertFromUtf32()を使用すると問題なく変換されることが分かったので、この用途ではこちらを使用したいと思います。
ちなみに
完全に自分用メモですが、WordでUnicodeコードポイントを直接入力するはかなり便利そうなので、使いたいと思います。
WindowsでUnicode文字を簡単に入力したり、Unicodeの文字コード番号を調べたりする方法など、Windowsで使えるテクみたいです。
色々と整理・テストしてみて、かなりすっきりしました。
あっ、やばい嫁に夜遅くまで記事書いているのバレて、怒られる。今日はここまでに。