作者: Bruce.
日時: 2004/5/10(20:42)
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/