はじめに
Firefox 1.5 などのアプリケーションで使用されている Gecko 1.8 は、XUL ファイルから読み込まれた JavaScript ファイルでの非 ASCII 文字のサポートが追加されました。
実質的に世界中のどんな言語で使われるどんな文字でもそのようなスクリプトファイルで使えるのです。例えば次のような行を扱うことができます:
var text = "Ein schönes Beispiel eines mehrsprachigen Textes: 日本語";
この例ではドイツ語と日本語の文字が混じっています。
以前のバージョンでは XUL から読み込まれた JS ファイルは常に ISO-8859-1 (Latin-1) として解釈されていました。ローカルの場合もリモートの場合もです。Unicode エスケープ(下で扱います)は機能していました。
Gecko 1.8 以降で文字エンコーディングを判定する方法
JavaScript ファイルが chrome://
URL から読み込まれたとき、FIXME: Byte Order Mark (BOM) によってそのスクリプトの文字エンコーディングを判定します。そうでない場合は、(<?xml?>
タグの encoding
属性を利用して指定できる)XUL ファイルで使用されているものと同じ文字エンコーディングとして判定されます。デフォルトでは UTF-8 が使われます。これは実際世界中のすべて文字を表現することができます。
スクリプトファイルが HTTP 経由で読み込まれた場合、HTTP ヘッダの Content-Type
ヘッダの部分に文字エンコーディング宣言が含まれていることがあります。例えば:
Content-Type: application/x-javascript; charset=UTF-8
charset パラメータが指定されていなければ上記のルールが適用されます。
バージョン間の互換性
Gecko 1.8 とそれ以前のバージョンで同じコードを動作させたいのであれば ASCII だけを使ってください。 しかし Unicode エスケープ を使うことができます。 これを使用すると先の例は次のように書き換えられます。
var text = "Ein sch\u00F6nes Beispiel eines mehrsprachigen Textes: \u65E5\u672C\u8A9E";
代替策として、nsIStringBundle か XUL の <stringbundle> 要素 を利用して property ファイルを使うこともできます。このことで XUL のローカライゼーションも可能になります。ただ、ウェブ上の XUL ファイルではこれが利用できません。拡張機能 など、特権を持ったコードでのみ利用できます。