― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

返信する
ユーザー名:
件名:
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: ON
BBCode を無効にする
フォントサイズ:
フォントカラー
スマイリーを無効にする
URL を自動的にパースしない
ユーザエージェントを表示する
認証コード
KCaptcha by Nikita_Sp
   

トピックのレビュー - Firefox の API を利用して言語のエンコーディングに対応する方法
作成者 メッセージ
  記事の件名:  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に移植するとか。

どちらにしても、言うほど簡単じゃなさそうですね。思いつきで無責任なコメントを残してしまってすみませんでした。
投稿記事 Posted: 2009年11月30日(月) 10:56
  記事の件名:  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;
(以下略)
投稿記事 Posted: 2009年11月30日(月) 08:37
  記事の件名:  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かと思います.
投稿記事 Posted: 2009年11月07日(土) 00:59
  記事の件名:  Firefox の API を利用して言語のエンコーディングに対応する方法  引用付きで返信する
今さらながら検索ボックス自動入力に piro さんがレビューしてくれていたことに気づいたんですが、ここに書かれてるFirefox の API などを利用してエンコーディングに対応する方法というのが見当もつきません。

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


今はShift_JISやEUC-JP に対応するためEscape Codec Library: ecl.js というのを特に仕組みもわからないまま使っていますが、それ以外についてはまったくわからないので具体的にどういうAPIを使えばいいのかなど教えてください。
投稿記事 Posted: 2009年10月13日(火) 20:50

All times are UTC + 9 hours


ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean