Core JavaScript 1.5 Guide:Unicode
出典: MDC
目次 |
[編集] Unicode
Unicode は主要な文字言語の交換や表示を目指したユニバーサルな文字コードの標準です。これは南北アメリカ、ヨーロッパ、中東、アフリカ、インド、アジア、太平洋地域の言語、さらに歴史的な文字や技術記号をカバーしています。Unicode は多言語テキストの交換、処理、表示を可能にします。一般的な技術記号や数学記号も扱えます。国ごとの文字の標準の違いなど、多言語処理に関する国際化問題を解消することが期待されています。しかしながら、今のところは現代の文字と古い文字がすべてサポートされているわけではありません。
Unicode 文字セットはすべての有名なエンコーディングに使用できます。Unicode は ASCII (American Standard Code for Information Interchange) 文字セットをモデルとしています。これは各文字に対して数値と名前を割り当てています。文字エンコーディングはその文字の識別情報およびその数値(コードの位置)、さらにこの値のビット表示を指します。16 ビットの数値(コード値)は 16 進数とその頭に U を付けたもので定義されます。例えば、U+0041 は A を表します。この値に対する固有の名前は LATIN CAPITAL LETTER A です。
JavaScript 1.3 より前のバージョンでは Unicode はサポートされていません。
[編集] Unicode の ASCII や ISO との互換性
Unicode は ISO/IEC 10646-1; 1993 と完全互換です。これは ISO 10646 のサブセットです。
いくつかのエンコーディングの標準(UTF-8、UTF-16、ISO UCS-2 を含む)は Unicode を実際のビットとして物理的に表現するのに使用されます。
Unicode の UTF-8 エンコーディングは ASCII 文字と互換性があり、多くのプログラムでサポートされています。最初の 128 の Unicode 文字は ASCII 文字に対応しており、同じバイト値をとります。Unicode 文字の U+0020 から U+007E までは ASCII 文字の 0x20 から 0x7E と同等です。ASCII はラテンアルファベットをサポートしており、7 ビット文字セットを使用しますが、UTF-8 は各文字について 1 オクテットから 4 オクテットを使用します(「オクテット」は 1 バイト、すなわち 8 ビット)。これによって何百万もの文字を表現できます。別のエンコーディング標準である UTF-16 は Unicode 文字を表現するのに 2 オクテットを使用します。エスケープシーケンスによって UTF-16 は Unicode の範囲全体を 4 オクテットで表現できるようになります。ISO UCS-2 (Universal Character Set) は 2 オクテットを使用します。
JavaScript および Navigator は UTF-8/Unicode をサポートしているため、非ラテン文字、国際文字、地域化された文字そして特殊な技術記号を JavaScript プログラムで使用できます。Unicode は多言語テキストをエンコードする標準の方法を提供します。Unicode の UTF-8 エンコーディングは ASCII と互換性があるため、ASCII 文字をプログラムで使用することもきます。また、非 ASCII の Unicode 文字を JavaScript のコメント、文字列リテラル、識別子、および正規表現で使用することもできます。
[編集] Unicode エスケープシーケンス
文字列リテラル、正規表現、識別子において Unicode エスケープシーケンスを使用することができます。エスケープシーケンスは ASCII 文字 6 文字からなります。それは \u と 4 桁の 16 進数です。例えば \u00A9 は著作権記号を表しています。JavaScript ではどの Unicode エスケープシーケンスも 1 つの文字として解釈されます。
次のコードは著作権記号と "Netscape Communications" という文字列を返します。
x="\u00A9 Netscape Communications"
次の表で、よく使用される特殊文字とその Unicode 値を列挙します。
| カテゴリ | Unicode 値 | 名前 | フォーマット名 |
|---|---|---|---|
| ホワイトスペースの値 | \u0009 | タブ | <TAB> |
| \u000B | 垂直タブ | <VT> | |
| \u000C | 改ページ | <FF> | |
| \u0020 | スペース | <SP> | |
| 行終端の値 | \u000A | 改行 | <LF> |
| \u000D | 復帰 | <CR> | |
| 付加的な Unicode エスケープシーケンスの値 | \u0008 | 後退 | <BS> |
| \u0009 | 水平タブ | <HT> | |
| \u0022 | 二重引用符 | " | |
| \u0027 | 単一引用符 | ' | |
| \u005C | バックスラッシュ | \ |
表 2.2:特殊文字に対する Unicode 値
JavaScript での Unicode エスケープシーケンスの使用方法は Java のそれとは異なります。JavaScript では、エスケープシーケンスは最初から特殊文字として解釈されるということはありません。例えば、文字列中の行終端のエスケープシーケンスは、関数がそれを解釈する前にその文字列を打ち切るということはありません。どのエスケープシーケンスがコメントで使用されたとしても JavaScript はそれを無視します。Java では、1 行コメント内でエスケープシーケンスが使用された場合、それを Unicode 文字として解釈します。文字列リテラルでは Java コンパイラは最初からエスケープシーケンスを解釈します。例えば、行終端のエスケープ文字(例:\u000A)を Java で使用すると文字列リテラルを打ち切ります。また Java では行終端が文字列リテラル内では許されていないために、これはエラーが発生します。文字列リテラルで改行を表したい場合は \n を使用しなければなりません。JavaScript ではエスケープシーケンスでも \n と同じように機能します。
[編集] JavaScript ファイルにおける Unicode 文字
以前のバージョンの Gecko では、XUL から読み込まれる JavaScript ファイルは Latin-1 文字エンコーディングが前提とされていました。Gecko 1.8 からは文字エンコーディングは XUL ファイルのエンコーディングから推測されます。詳しくは XUL JavaScript における国際文字 を参照してください。
[編集] Unicode を用いた文字の表示
Unicode を用いることで異なる言語の文字や技術記号を表示させることができます。文字を適切に表示させるには、Mozilla Firefox や Netscape といったクライアントが Unicode をサポートしている必要があります。さらに適当な Unicode フォントもそのクライアントで使用できなくてはならず、またクライアントのプラットフォームが Unicode をサポートしていなければなりません。Unicode フォントが Unicode を全部は表示できないということがよくあります。Windows 95 など、Unicode を部分的にサポートしているというプラットフォームもあります。
非 ASCII 文字の入力を受け取るには、クライアントが入力を Unicode として送信する必要があります。標準的な拡張キーボードを使用すると、Unicode でサポートされている付加的な文字をクライアントが簡単には入力できなくなります。Unicode 文字を入力する唯一の方法が Unicode エスケープシーケンスを使用することという場合がたまにあります。
Unicode の詳細な情報については Unicode Home Page や The Unicode Standard, Version 2.0(出版元:Addison-Wesley、1996 年)をご覧ください。