Bruce. です。
> 円記号かバックスラッシュかどうかというのは、どのフォントを使って表示す
> るのかという問題のような気がしますが。
euc-jpだけで閉じていて、問題が表示のみであればそうですが、今回の場合
別のコード体系への変換を行っているというのがポイントです。ASCIIの0x5c
(バックスラッシュ)とJIS X201の0x5c(円記号)は同じ値を持っていて、可換で
あるかのように扱われていますが、たとえば
printf("値段は\\%d。");
という文字列があったとしてこれをUnicodeへ変換するとしましょう。さて、こ
の'\'は何に変換すればよいでしょうか? Unicodeではバックスラッシュと円記号
はまったく別の位置にあります。
この辺の問題は
http://www.opengroup.or.jp/jvc/cde/ucs-conv.html
でも述べられています。以下に一部を引用します。
> 「\」と「¥」との区別は, UCS のように「\」と「¥」との両方のコード
> ポイントが存在するコードセットとの間のコード変換をする際には次のような
> 問題が発生する.
>
> * 0x5C を「\」(0x005C) に変換した場合, 通貨記号として「¥」を使っ
> ているデ ータやプログラムはすべて書き直しが必要になる. たとえば,
> 5000円のつもりで 「¥5000」と書いてあったデータが「\5000」に化け
> てしまう.
> * 0x5C を「¥」(0x00A5) に変換した場合, こんどは「¥」が論理的には
> 「\」と 同じという前提で書かれた多数のプログラムが書き直しになる.
> たとえば, C 言 語プログラムで「¥n」は「\n」と等価ではなく,
> 「¥」と「n」が連続して いるだけの文字列となってしまう.
0x5cがバックスラッシュなら何の問題もなくバックスラッシュですが、
実は円記号でした。という場合に問題が表面化するわけです。
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mail kbk@...
web www.kt.rim.or.jp/~kbk/