Windowsで入力している¥は \(バックスラッシュ)


Windows OSで通常入力したり表示している ¥\(バックスラッシュ)0x5Cです。

Unicode 文字コード
\(バックスラッシュ) U+005C
¥(円記号) U+00A5

なんで\を入力しているのに、¥と表示されるか?
日本語フォントが \を表示上 ¥ で変換して表示しているため
※欧米フォントはバックスラッシュをそのままバックスラッシュで表示している

Arialなどの欧米フォントは \
メイリオやMS ゴシックなどの日本語フォントは ¥

下記サイトで自分のPCから使えるフォントでの表示を見比べれる。
操作方法:テキストボックスに \を入力してEnter
https://wordmark.it/

Mac OSだとどうなるか?

¥は そのまま ¥(円記号)0xA5で入力される
Option + ¥\(バックスラッシュ)0x5Cを入力できる。
参考:Macにおけるバックスラッシュ(\)の入力方法 - Qiita

きっかけ

Mac Bookで JavaScriptの正規表現での置換で、エスケープシーケンスをWindowsでコーディングしている時と同じ感覚で入力していたため

エラー例
var str = 'filename.txt';
var str = str.replace(/¥.txt/g, '.csv'); // この行のようにコーディングしてしまった
console.log(str);
上記エラーを正常へ書き直した例
var str = 'filename.txt';
var str = str.replace(/\.txt/g, '.csv');
console.log(str);

歴史的経緯

国際標準と日本標準のずれ

一番最初の文字コードがISO/IEC 646で、IEO/IEC 646を元に各国語版の文字コードが定義されました。
アメリカがASCII、日本がJIS X 0201(初期Shift-JIS)

文字コード種類 文字コード 文字名称
ASCII 0x5C \ (バックスラッシュ)
JIS X 0201 0x5C ¥(円記号)

ASCII - Wikipedia

JIS X 0201 - Wikipedia

WindowsOS 内部コード変換時の対応

Windows 95, 98 → ShiftJIS
Windows NT 4.0以降 → Unicode
とWindows NT以降はShiftJISからUnicodeへ文字コードが変わっています。

今までShiftJISで書いていた 0x5Cの¥が二つの意味を持っておりそれを振り分けることが難しいという課題があった。
・制御コードとしての\(バックスラッシュ)0x5C? 
・通貨単位などを表すための円記号なのか?

課題の現実的な解決策として、内部の文字コードは変換せずに 0x5Cのまま、マイクロソフトの日本語フォント 0x5Cを円記号として表示することで表面上の問題が起きないようにした。

円記号 - WikipediaのUnicodeが持つ問題(円記号問題)一部
多くの日本語JISキーボードでは円記号とバックスラッシュのキーが別々に存在しているが、どちらを入力しても005Cが入力されるようになっている。結果、JISからの変換やキーの入力は005Cに統一され、これらのフォントを用いる限り円記号が表示されるようになっている。