MozillaZine.jp フォーラム
https://forums.mozillazine.jp/

Firefox の API を利用して言語のエンコーディングに対応する方法
https://forums.mozillazine.jp/viewtopic.php?f=26&t=9240
ページ 11

作成者:  masahal [ 2009年10月13日(火) 20:50 ]
記事の件名:  Firefox の API を利用して言語のエンコーディングに対応する方法

今さらながら検索ボックス自動入力に piro さんがレビューしてくれていたことに気づいたんですが、ここに書かれてるFirefox の API などを利用してエンコーディングに対応する方法というのが見当もつきません。

引用:
惜しむらくは、現状ではShift_JISやEUC-JPなどの日本語系のエンコーディングにしか対応していないと思われる点でしょうか。Firefox本体のAPIを上手く利用して、中国語など他の言語圏のエンコーディングでも期待通り機能するようになればいいなあと思います。


今はShift_JISやEUC-JP に対応するためEscape Codec Library: ecl.js というのを特に仕組みもわからないまま使っていますが、それ以外についてはまったくわからないので具体的にどういうAPIを使えばいいのかなど教えてください。

作成者:  AR [ 2009年11月07日(土) 00:59 ]
記事の件名:  Re: Firefox の API を利用して言語のエンコーディングに対応する方法

nsIScriptableUnicodeConverter を使用して Unicode と他の文字コードの間を行ったり来たりできます.
使い方としてはこんな感じ.
コード:
var conv = Components.classes ["@mozilla.org/intl/scriptableunicodeconverter"]
  .createInstance (Components.interfaces.nsIScriptableUnicodeConverter);
conv.charset = "shift_jis";
var unicode_text = "なんとか";
var sjis_text =  conv.ConvertFromUnicode (unicode_text);
var unicode_text2 =  conv.convertToUnicode (sjis_text);

あとは目的の文字コードの名前さえ分かればOKかと思います.

作成者:  masahal [ 2009年11月30日(月) 08:37 ]
記事の件名:  Re: Firefox の API を利用して言語のエンコーディングに対応する方法

AR さんが書きました:
nsIScriptableUnicodeConverter を使用して Unicode と他の文字コードの間を行ったり来たりできます.
使い方としてはこんな感じ.
コード:
var conv = Components.classes ["@mozilla.org/intl/scriptableunicodeconverter"]
  .createInstance (Components.interfaces.nsIScriptableUnicodeConverter);
conv.charset = "shift_jis";
var unicode_text = "なんとか";
var sjis_text =  conv.ConvertFromUnicode (unicode_text);
var unicode_text2 =  conv.convertToUnicode (sjis_text);


どうもありがとうございます。返信遅れてすいません。

AR さんが書きました:
あとは目的の文字コードの名前さえ分かればOKかと思います.

やっぱこれがネックですよね。自分が今使ってるEscape Codec Library: ecl.jsでは以下のような感じのソースで判断していて、結局個別に判断するしかないのかなーって感じなんですが。

コード:
   if(/%u[0-9A-F]{4}/i.test(str))return "Unicode";
   if(/%([0-9A-DF][0-9A-F]%[8A]0%|E0%80|[0-7][0-9A-F]|C[01])%[8A]0|%00|%[7F]F/i.test(str))return "UTF16LE";
   if(/%E[0-9A-F]%[8A]0%[8A]0|%[CD][0-9A-F]%[8A]0/i.test(str))return "UTF8";
   if(/%F[DE]/i.test(str))return /%8[0-9A-D]|%9[0-9A-F]|%A0/i.test(str)?"UTF16LE":"EUCJP";
   if(/%1B/i.test(str))return /%[A-D][0-9A-F]/i.test(str)?"JIS8":"JIS7";
   var S=str.substring(0,6143).replace(/%[0-9A-F]{2}|[^ ]| /ig,function(s){
      return s.length<3?"40":s.substring(1)
   }),c,C,i=0,T;
(以下略)

作成者:  Piro [ 2009年11月30日(月) 10:56 ]
記事の件名:  Re: Firefox の API を利用して言語のエンコーディングに対応する方法

言うだけ言って何も調べてなくてすみません……今更ですがちょっと調べてみました。

Firefoxの場合エンコーディングの自動判別には日本語や中国語などの言語ごとに用意された判別用コンポーネントが使われているようで、どのコンポーネントを使って判別するかはintl.charset.detectorという設定で切り替える事ができます。「表示」→「文字エンコーディング」→「自動判別」のメニューはこれを切り替えるもので、「日本語」を選択した場合なら設定値は「ja_parallel_state_machine」になります。

で、このコンポーネントには「@mozilla.org/intl/charsetdetect;1?type=ja_parallel_state_machine」という風なコントラクトIDでアクセスすることができるみたいなんですが、インターフェースのIDL定義が用意されていないみたいで、残念ながらJavaScriptからは機能を呼び出せないようです。

http://mxr.mozilla.org/mozilla-central/ ... OMFile.cpp
これはHTML5のファイル読み取り機能の部分のソースですが、この中で定義されているGuessCharsetと同様の処理を行うコンポーネントをC++で開発すれば、多分、エンコーディングの自動判別機能だけを取り出して利用できるんじゃないかと思います。

あるいは、
http://mxr.mozilla.org/mozilla-central/ ... src/xpcom/
http://mxr.mozilla.org/mozilla-central/ ... /src/base/
にあるC++による実装をJavaScriptに移植するとか。

どちらにしても、言うほど簡単じゃなさそうですね。思いつきで無責任なコメントを残してしまってすみませんでした。

ページ 11 All times are UTC + 9 hours
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/