|
2.8.8 発展:外部文字コードの使用
Mathematicaで特殊文字や記号を入力するには,英語名で参照する方法と,文字コードで参照する方法を使える.例えば, を入力するには, \[Alpha]か \:03b1をタイプする.Mathematicaから文字列等をファイルに落とすときも,特に指定がなければ,これら2つの書式のどちらかが使われる.
特殊文字と記号によっては,Mathematica内部で使う専用文字コード規格ではなく,従来規格の文字コードで指定した方が手っ取り早いときもあるだろう.つまり,Mathematicaデフォルトの英語名や専用16進数文字コードを使うのではなく,オペレーティングシステムの環境およびフォント別に定義してある外部文字コード規格を使うということである.

外部文字コード規格の使用
外部文字コードとは,例えば,キーボードのキーを押したときにオペレーティングシステムから送られてくる生の文字コードのことである.コードの値はそのときに使われている文字コード規格による.
ノートブック用フロントエンドを使っている場合,使っているフォントにより自動的に適切な文字規格が選択されるのでユーザが設定変更する必要はない.テキスト用フロントエンドを使っている場合やファイル処理またはパイプ処理をしている場合,自動設定は行われないので必要ならば$CharacterEncodingを使い設定を手動で変更する.
$CharacterEncodingの機能で適当な規格を指定しておけば,文字コードに依存するテキストエディタやオペレーティングシステムの直接生成する生のテキスト等が直接処理できるようになる.
Mathematica専用の文字コード規格で特殊文字と記号を記述してあれば,オペレーティングシステム環境に関係なくMathematicaで読む限りは確実に文字と記号を再現できる.外部規格を使う場合はこの限りではない.

Mathematicaで扱える外部文字コード規格の一覧
どの外部文字コード規格が適切かといった指定はオペレーティングシステムの環境設定や使用言語に応じてMathematica内部で設定済みである.
ファイルの書き出し等の処理において,特別な外部規格を指定すると,規格に準じた文字や記号はその規格の文字コードで記述される.ただし,規格外のものはMathematica専用規格の英語名もしくは文字コードで記述される.
また,先に指定しておけば,外部規格の文字を直接Mathematicaに入力することも可能である.入力直後に,文字コードが内部規格に自動変換される.
ファイルtmpに特殊文字を含む文字列を書き出してみる.
In[1]:= "a b c \[EAcute] \[Alpha] \[Pi] \:2766" >> tmp
内容を確認する.特に外部文字コードは指定していないので,デフォルト英語名と16進数コードで記述されている.
In[2]:= !!tmp
""a b c é  ?""
次に,特別にMacintoshのローマンフォントの文字規格を使うよう命令してみよう.
In[3]:= $CharacterEncoding = "MacintoshRoman"
Out[3]= 
前と同じ文字列を入力する.
In[4]:= "a b c \[EAcute] \[Alpha] \[Pi] \:2766" >> tmp
Macintoshローマンフォント文字規格を使うシステムでないと読めない.
In[5]:= !!tmp
""a b c é  ?""
外部規格の使用を禁止にする.
In[6]:= $CharacterEncoding = None
Out[6]= 
それでも,使う関数によっては外部規格を特別に指定できる.
In[7]:= Get["tmp", CharacterEncoding->"MacintoshRoman"]
Out[7]= 
Mathematicaのサポートする外部文字コード規格には1バイト(8ビット長)と2バイト(16ビット長)がある."ISOLatin1"等の規格は1バイト文字だけで構成されるが,"ShiftJIS"は2バイト文字が主体になっている.
Mathematicaのサポートする外部文字コード規格において,そのほとんどはASCII規格を取り込んだ形で定義されている.したがって,それらの外部規格を使う限りは,文字列 \[と \:を使った特殊文字の指定が有効である.
ASCII規格に準拠していない文字コード規格には,例えば,"Symbol"で指定される記号文字コード規格がある.この文字コード規格では,ASCIIアルファベットのaはギリシャ文字 になり,bは になる.
英語アルファベットのいくつかをASCIIコード列挙する.
In[8]:= ToCharacterCode["abcdefgh"]
Out[8]= 
同じ文字コードを記号規格でみると,ギリシャ文字として扱われていることが分かる.
In[9]:= FromCharacterCode[%, "Symbol"]
Out[9]= 

内部および外部文字コード規格を使った文字と文字コードの変換
文字や記号に対応したMathematica内部規格の文字コードを列挙させる.
In[10]:= ToCharacterCode["abc\[EAcute]\[Pi]"]
Out[10]= 
Macintoshの文字コードと比べる.
In[11]:= ToCharacterCode["abc\[EAcute]\[Pi]", "MacintoshRoman"]
Out[11]= 
Windowsの文字コードはどうであろうか.Windowsのローマン規格には \[Pi] はマップされていないことが分かる.
In[12]:= ToCharacterCode["abc\[EAcute]\[Pi]", "WindowsANSI"]
Out[12]= 
Mathematica内部で使う文字規格は Unicodeに準拠している.ただ,外部とのやり取りでは,通常,ASCIIコードだけが使われる.特殊文字や記号も, \[Name]と \:xxxxの書式に基づいたASCII記述が使われる.また, Unicodeをあらかじめ指定しておけば,ファイルを Unicode準拠のテキスト(2バイト文字)として読み込ませることは可能である.
|