Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

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)

image.png

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

ASCII - Wikipedia
image.png
JIS X 0201 - Wikipedia
image.png

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?