toinamiの日記β このページをアンテナに追加 RSSフィード

2007-02-27 (Tue)

[]Mac osで「\」が?になる問題(の想定) 12:35 Mac osで「\」が?になる問題(の想定) - toinamiの日記β を含むブックマーク はてなブックマーク - Mac osで「\」が?になる問題(の想定) - toinamiの日記β Mac osで「\」が?になる問題(の想定) - toinamiの日記β のブックマークコメント

一部訂正済み。

まず、半角円記号「¥(¥)」が、Unicodeを厳密に当てはめると本当はコード[0xA5]だ、と言うところが問題の始まりです。

(ついでなのでリンクも張っておこう。(1)http://www.unicode.org/charts/PDF/U0000.pdf / (2)http://www.unicode.org/charts/PDF/U0080.pdf / (1)の0x5Cはバックスラッシュ、(2)の0xA5は円記号)

ASCIIだと当然円記号などはありません。Shift_JISではASCIIコードバックスラッシュ部分([0x5C])に円記号を割り当てられました。

大抵の処理系では、厳密さよりも実用度*1からShift_JISの「0x5Cは記号のバックスラッシュだけど、日本語環境では円記号に見える」ルールが適用されていますが、Mac OSの一部(OS Xだけ?)では厳密さが勝っていて、「円記号を打ったらそれは0xA5だ」と言うことになっているようです。(それが、ブラウザだとsafariだけなのかどうか、は私は知りません)



はてなダイアリーでは文字コードEUC-JPが使われています。EUC-JPでは 0x80以上の文字コードは2バイト文字の一部分、なので、0xA5単体で来られてもどうしようもないので、結果的に?になります。修正:Unicodeで0xA5があってもブラウザからリクエストする際にEUC-JPに変換しようとしても変換する文字が無く、結果的に?に変換してからリクエストします

……と言う事じゃないですかね?

円記号 - Wikipedia とかも参考に。

追記:Unicode - 6.1 YEN SIGN問題 - Wikipedia とかも。



hmori 『よくわからないけれど、これってhatena努力で直るものなの?』

idea:14085ベットコメント

取消:UA固定で(単発で出てきた)0xA5なら0x5cに変換、ってできないことはないと思いますが、やらないでしょ。 事実上無理。



適当に検索してみたよ

ASCIIベースにした従来のコード体系で、ソフトウェアの制御コードとしてバックスラッシュ記号が使用されてきました。その文字の番地(0x5C)には、日本語ASCIIでは円記号が割当てられていたため、円記号が制御コードとしても使われることになりました。

その後普及したUnicodeでは、ヨーロッパ版で円記号に異なる番地(0xA5)が割当てられました。Mac OS Xでは、円記号にこのヨーロッパUnicodeの番地が使われたようです。したがって、制御コードバックスラッシュ(0x5C)と円記号(0xA5) とが、明確に区別されることになります[*1]。

FN0612001 - Flash 8/Mac OS Xで円記号がエスケープ文字として認識されない - Flash : テクニカルノート

FLASHの事例ですが、まあ同じ事ですか。

# どうでもいいけど、「制御コード」とか制御記号とかって0x00 - 0x1F ,0x7F とかのことを言いませんか。思わずつられていましたけど。ついでに「ヨーロッパUnicode」とかも語句としてはちょっと奇妙。



実質的に関係するアイデア

[文字を置き換えてくれ系アイデア]

追記:ちなみに、今回のことは「文字を置き換えてくれ系」では対処できません。


[ダイアリを作り直して欲しい系アイデア]

追記

一度書いていた部分

ってことは「\\」とか打つと「ゥ」になったりするのだろうか?

はならないようですね。

(そりゃ、ブラウザ上(Unicode)で0xA5の文字列を、postする際にEUC-JPに変換しようとするところまではブラウザ仕事だから、その時点で変換できなくて?になっているか。)

*1Unicode登場前からの互換性とかその他諸々