header

バックスラッシュと円マーク

(1/2)

バックスラッシュ「\」と円マーク「¥」

実は、我々がASCII(ISO 646)コードと呼んでいるものの大部分は、JIS X 0201のことである。
ASCIIとJIS X 0201の違いは、後者が半角カタカナを含んでいる点もそうだが、コード5Cのバックスラッシュ「/」が円マーク「¥」に置き換わっている点が大きい。(ここでは文字化けを防ぐため、両方とも全角文字で代用表記する。ちなみに、お隣の韓国ではウォン・マークに置き換わっているらしい)

この違いは、 とくにプログラミングに関わる文字化けとして、今日まで影響を及ぼしている。UNIXのエスケープ文字としてバックスラッシュが使われてきたためである。

たとえば、正規表現(文字検索でよく使われる、詳細はhttp://www.kt.rim.or.jp/~kbk/regex/regex.html)で、バックスラッシュはエスケープ文字として機能する。また、C言語系のプログラミング言語ではprintfフォーマットで、やはりバックスラッシュがエスケープ文字として機能する。
これらを日本のパソコンで見ると、すべて円マークに置き換わってしまう。
かつて、海外のコンピュータ書籍に書いてあるプログラムのソースコードにバックスラッシュがあるのに、どうやって入力したらよいか分からなくて苦労した方もいるのではないだろうか。(翻訳本でもバックスラッシュのままのことが多かった)

バックスラッシュとエスケープ文字

もう1つの問題は、シフトJIS(いずれ解説する)の一部にバックスラッシュと同じコードを含んでいる文字があることである。「表」「能」などがそうである。
このため、日本語化を謳いながら、ファイル操作や正規表現、文字列操作で正常に動作しないプログラムが発生した。
インターネット時代を迎えた今日でも、この問題は引きずられている。たとえば、PHPはシフトJISコードを含むマルチバイト文字を扱うことができる優れた言語だが、SQLを実行する際に文字化けを起こすことがある。

0001: $sql = "insert into mytable values ('機能')";
0002: $res = mysql_query($sql, $con); 

上記のプログラムは、MySQLに文字列「機能」を新規登録するSQLクエリだが、これをシフトJISモードで実行すると文字化けを起こす。「能」はシフトJISコードで945Cだが、第2バイトの5Cがバックスラッシュと同じなので、 mysql_queryを実行する際にエスケープ文字として認識され、文字化けを起こす。