• このエントリーをはてなブックマークに追加

iso-8859-1とwindows-1252

ある海外のWebページで、JavaScriptのエラーが出てしまう。 検索フォームにJavaScriptを用いているようで、一度エラーが出るとスクリプトが停止するためページ内検索ができない。

勝手に調べてみると、JavaScriptのエラーは文字列が閉じられていない、つまり終わりのクォーテーションがないという内容。 ソースを直ダウンロードしようとしてもだめだったので、IEの「名前をつけて保存(A)」で完全保存してみた。そうすると、ページ内で呼び出しているファイルも合わせて保存してくれるのだ。

で、そのソースを調べてみると、ダブルクォーテーションで囲ってあるだろう文字が文字化けしていて、その直後のダブルクォーテーションを食ってしまっていた。

その文字コードをバイナリエディタで見てみると、0x92と0x94。日本語2バイト文字の最初のコードの一部だ。何だろうと思ってみてみると、windows-1252という文字列セットでいうところのハイフンと™マークだった。ほぅ。そんなエンコード初めて聞いた。IEのエンコードでいうと西ヨーロッパ言語(Windows)だそうな。ISO-8859-1は西ヨーロッパ言語(ISO)の方らしい。

というわけで、Japaneseのbrowserではsearchがcannotよーって教えてあげた。 6月からたまにJapaneseからそんなこと言われるけどわかんねーとか。 そして、エラーの状態のムービーを撮って送ってくれだのOSやらブラウザのバージョンを教えてくれだの言われたので録画して情報を添えて教えてあげた。 教えてあげるけど、そんなの関係なくってYouのJavaScriptのhereがまずいんだよーって伝えた。多分、伝わったんじゃないかな。

そのときにこれ使ってくれーって言われたのがSnagItというソフト。キャプチャソフトだけれど、Windowsの動作を動画として保存することができる。おもしろい。言葉がないので、まずページを開いて、エラーが出たときの三角マークをマウスカーソルでぐりぐりアピールして、エンコードを変更したら検索もできるんだよーっていう動作をして見せた。

原因は、エンコードをMETAタグで指定してないから日本のブラウザは日本語のページと思ってしまい、windows-1252だけの特別な文字コードを2バイト文字の一部と解釈してしまうということだ。なので、とりあえずMETAタグでwindows-1252を指定すればよくって、でも根本的にはwindows-1252だけの文字は使わずiso-8859-1に合わせた方がいい。

昨夜というか今朝方2時頃だったかな、ちょっと今からpublishするからtestしてくれとメールが来て、たまたま起きてたから見てやった。 でも、一部は良くなってたけど一部はまだだめなまま。 とりあえず、眠くて仕方なかったからまた明日~って言ってとりあえず寝た。

そのだめな方を昼間にチェックしてみると、今度はJavaScriptじゃなくて本文にwindows-1252文字が入っていて、しかもMETAタグの宣言がiso-8859-1になっている。ブラウザは、iso-8859-1と思ったのにwindows-1252文字が入ってるし、とりあえずデフォルトのJapaneseにしておけ、という動作をしたのではないかと思う。

windows-1252という文字セットはiso-8859-1をマイクロソフトが独自に拡張したものになるのかな。その中の、Shift_JISでいうところの半角カナみたいな独自拡張部分が今回の悪さをしているわけで、世界標準がいかに大事かということを痛感した。標準を壊していくi-modeやMicrosoftみたいなのは困った存在だ。 シェアが大きいだけに。

もうずっと長いこと英語を書くということをやっていないので(さすがに読むことはある)、多分いいかげんな英語を書いてるんだろうなぁと思いながら、まぁでも伝われば何でもいいや、つまりロールは起き上がれば別になんでもいいというのと同じような前向き姿勢で臨んでいる。

時差があると大変だ。今晩は修正されるのだろうか。

  • このエントリーをはてなブックマークに追加

WordPress/Twitter/Facebookのアカウントも使えるようになりました。