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 | ¥(円記号) |
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に統一され、これらのフォントを用いる限り円記号が表示されるようになっている。