スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--)--:--

スポンサー広告 | | | [編集]

▲ページトップ

ISO-2022-CNに見るFirefox 3の残念な動作

今日は、ISO-2022-CNの実装を完成させた。


符号の特徴


大陸のGB 2312と、台湾のCNS 11643の1面、2面までに対応します。
後日対応予定のものに、支那と台湾の全ての符号に対応する「ISO-2022-CN-EXT」なんてのもあります。豪華ですが、支那側で終端文字が無い符号が殆どで、実際には利用不可能です。


全く異なる国の、全く異なる文字集合を、無理矢理一つの符号として扱おうというのは、大陸側の侵略思想が見え見えです。
政治問題ネタは避けたいところですが、「一つの中国」思想が、この「ISO-2022-CN(-EXT)」なわけです。
しかしながら現実として、台湾も大陸も、殆ど使っていないようです。

CNS 11643が台湾の公的規格ということで、お役所関係では僅かに利用例があるらしいです。詳細不明。
ただどちらかというと、EUC-TW的な使われ方が主らしく、やっぱりエスケープシーケンスで切り替える使い方は殆どされていない模様。処理が面倒ですもんね。
結局、殆ど誰も使っていない。


まぁ、そんな、とても政治的な符号です。


CNS 11643


今日は、作りかけのCNS 11643の1面と2面の変換表を完成させました。
unicode.orgのUnihan.txtをベースに、先日使ったCNS11643.TXTと比較してみましたが、1面と2面については完全に一致していました。
CNS11643.TXTにはバグがあるという説があるので、やや困惑。

とりあえず、Unihan.txtが根本資料なら批判も少なかろうということで、これでひとまず完成とした。


優先度


全く異なるコンセプトの文字集合が二つ合同しているわけです。
同じ文字が、大陸側にも、台湾側にもあります。

従って、出力するにおいて、双方にある文字をどちらのエスケープシーケンスで出力するか、を決める必要が出てきます。

どちらを優先するかは、CCSとして指名することにしました。

ISO-2022-CN 大陸優先
ISO-2022-CN/GB 同上
ISO-2022-CN/CNS 台湾優先

両方にある文字は、指定した方を優先します。
一方にしか無い文字は、そのエスケープシーケンスで吐き出します。


Firefox 3というブラウザ


この符号はIE7は対応していないので、Firefox 3でテストしていました。
しかしながら、このFirefox 3というブラウザは、ISO-2022-CNという以前に、ISO/IEC 2022を真っ当に実装していないことが判明しました。
手抜きというか、酷い有様です。

まず、エスケープシーケンスというものを、正常に認識しない。

ISO-2022-CNの場合、GB 2312を指示するのに「ESC 2/4 2/9 4/1」とします。
このシーケンスは「G1」に指示されますから、その後、ロッキングシフト1こと「SO」(0x0e)でG1をGLに恒久的に呼び出すわけです。

しかし、Firefox 3はかなり愚かな実装をしているようで、「ESC 2/4 2/9 4/1 0/14」というSOを含めたバイト列のみを認識するようです。

なので、事前にSOする「0/14 ESC 2/4 2/9 4/1」では動かない。ISO/IEC 2022的には何の問題もありません。

そもそも、ISO-2022-CNは大陸のGB 2312と、台湾のCNS 11643を使うというのは前述の通りで、一旦SOしてしまえば、後はどんなエスケープシーケンスで指示しようが、SOは漢字文字だけの場合は必要ないわけです。

つまり
<GB 2312の指示> <SO> 大陸漢字 <CNS 11643の指示> 台湾漢字 <SI>
は正常なシーケンスで、RFCにも違反していないものと考えます。
そもそも、RFC 1922自体、そのような符号列をサンプルとして載せているのです。

しかし、Firefox 3は、SOがない二つ目のシーケンスを認識せず、異常表示になります。

更に言えば、指示のシーケンスの直後からG1を使わなければならないという義務もないわけで、ちょっと偏屈ですが、ファイルの先頭でこのシーケンスを投げておいて、暫くはG0のASCII文字を使う、ということも、あっても何の不思議もないはずなのです。

しかし、Firefox 3では、それが認められません。

Firefox 3は、とても残念なブラウザでした。


IE7とOpera


Operaの場合、これも完全にISO/IEC 2022を実装しているかというと、していない。
しかし、Firefox 3とは比較するまでもなく、少なくともRFCに書かれた程度は実装するよう頑張っているようです。
SI/SOの管理や、エスケープシーケンスは、ちゃんと認識しますので、閲覧に支障が出ることはないでしょう。

IE7はISO-2022-CNには対応していませんが、同様にG1を使うISO-2022-KRには対応しています。
当然IE7も、エスケープシーケンスとSI/SOは個別に管理し、処理しているようですから、閲覧に支障が出ることはないでしょう。

Operaも、G2にあるものをSS2ではなくLS2で呼び出す方法(RFC違反)は、さすがに対応していませんでした。まぁ、RFCに書かれていませんから、これは問題ないと思います。


では、どう出力すればいいのか


開発中の製品gTefは、ISO/IEC 2022を本気で実装しているので、普通に出力させれば、Firefoxでだけ表示できないファイルが出力されます。
個人的にはそれで仕方がないと考えていますが、そうでない人もいるとは思います。

しかし、ちゃんと実装しているので、何でもない時にSOを吐き出すような処理にはなっていない。
エスケープシーケンスの後に、逐一SOを吐いたりはしない。

吐かせることは簡単にできるのですが、標準仕様から見れば、明らかに不要なSOが混ざる。RFCの例からも外れた結果になる。
もしかしたら、その余計なSOのせいで不正な表示になるソフトもあるかもしれない(これはこれで問題だが)。
とりあえず、結論は今は出さないことにした。


Firefox 3は、つくづく残念なブラウザでした。



追記


情勢に動きがありました。
Firefox3のISO-2022-CN、その後」として、平成20年12月20日に後日記を書いています。
(平成20年12月29日 追記)

2008/12/17(水)22:53 |Comments(0) |Trackback(0)

技術情報 | プログラミング | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

EUC-TW ホーム 年の瀬も近付いてきました
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。