Firefox アドオン中での文字コードの変更方法 (XPCOM を JavaScript から使用する)

Firefox のアドオン (拡張機能等) を開発する際に、文字コードを変更する必要がでてくることもあるかと思います。 ここでは、JavaScript のコード中の文字列の文字コードXPCOM *1 を使用して変更する方法について記します。

ここに書いてある方法はあくまで Firefox アドオン中で実行可能な方法であり、通常の web ページ内の JavaScript などでは使用できません。 文字コードの変換はアドオンから外部のプログラムなどに文字情報を送る際などに必要になると思います。

nsIScriptableUnicodeConverter

使用するのは nsIScriptableUnicodeConverter です。 これを使用することで JavaScript 上の通常の文字列 *2 を各種文字コードエンコードされた文字列に変換したり、逆に各種文字コードエンコードされた文字列を Unicode 文字列に変換したりできます。

nsIScriptableUnicodeConverter を使用するために、まずインスタンスを取得します。

var unicodeConverter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]
.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);

次に、変換対象の文字コードを設定します。 次の例では Shift_JIS文字コードとして設定しています。

try {
unicodeConverter.charset = "Shift_JIS";
} catch(e) {
// 設定しようとした文字コードがサポートされていない場合は例外発生
// 例外処理
}

最後に文字コードの変換を行います。 次の例では文字列 "テスト文字列" を Shift_JIS に変換し、そのあとで逆の変換をしています。

var str = "テスト文字列";
// 文字列 str を Shift_JIS (unicodeConverter.charset に設定した文字コード) に変換する
// 変換後、Funish メソッドを使用し, その返り値を変換後の文字列の末尾に繋げなければならない
var sjisStr = unicodeConverter.ConvertFromUnicode( str ) + unicodeConverter.Finish();
// 変換後の文字列をまた Unicode 文字列に戻す
var ucStr = unicodeConverter.ConvertToUnicode( sjisStr );

これで文字コードの変換ができます。 nsIScriptableUnicodeConverter は他にもメソッドをいくつか持っているので、詳しくは MDC のドキュメントを読んでください。

*1:XPCOM とは Mozilla プロジェクトにおいて開発されているクロスプラットフォームコンポーネント技術で、JavaScript からもそのコンポーネントを利用できます。

*2:Unicode 文字列。 内部的には UTF-16 ですかね。