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



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年10月13日(火) 20:50 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
今さらながら検索ボックス自動入力に piro さんがレビューしてくれていたことに気づいたんですが、ここに書かれてるFirefox の API などを利用してエンコーディングに対応する方法というのが見当もつきません。

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


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

_________________
masahal
antispam826-public at yahoo.co.jp
http://masahal.web.fc2.com/


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年11月07日(土) 00:59 
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月30日(月) 08:37 
オフライン

登録日時: 2008年8月24日(日) 21:09
記事: 33
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日(月) 10:56 
オフライン
Moderator

登録日時: 2007年5月03日(木) 01:11
記事: 92
お住まい: 東京
言うだけ言って何も調べてなくてすみません……今更ですがちょっと調べてみました。

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に移植するとか。

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


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 4 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[4人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

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