-->

Thursday, July 11, 2013

円記号とバックスラッシュを区別して入力したい - Linux コンソール編

やりたいこと

日本語キーボードの
円記号(¥)を入力したら円記号(¥, U+00A5)
バックスラッシュ(\)を入力したらバックスラッシュ記号(\, U+005C)
を入力できるようにしたい。


Linux コンソールの場合

環境変数 LANG

UTF-8 を使用する

シフトJISやEUC-JPでは円記号とバックスラッシュ記号の両方を同時に扱うことはできない。
(扱おうとしているから、あちこちで問題が起きているw)

両方を扱えるように、 ja_JP.UTF-8 あるいは en_US.UTF-8 などを使うことになる。

設定ファイル

日本語キーボードを使う場合は、通常 jp106 を次のファイルに設定する。

RedHat系

設定ファイル: /etc/sysconfig/keyboard
KEYTABLE="jp106"
 
参照キーマップファイル
/lib/kbd/keymaps/i386/qwerty/jp106.map.gz
 
Gentoo

設定ファイル: /etc/conf.d/keymaps
keymap="jp106" 
 
参照キーマップファイル
/usr/share/keymaps/i386/qwerty/jp106.map.gz
 
しかし、このままでは円記号を入力してもバックスラッシュが入力され表示される。

その理由は、jp106 のキーマップファイル(jp106.map.gz)にある。
 
keycode = 124  backslash     bar
 

円記号のキーコードがバックスラッシュとして定義されている
おそらく、これも EUC-JP がメインだった時代の歴史的な理由からこうなっていると思われる。

解決策


キーマップファイルを書き換える。
 
keycode = 124    yen     bar
 

jp109.map.gz として保存し、新しいキーマップをロード
 
loadkeys jp109
 

問題なければ設定ファイルを jp109 で書き換える


Gentoo (kernel 3.8.13)

CentOS 6.4




参考サイト

maoeのブログ - コンソールのキーマップ変更

円記号とバックスラッシュを区別して入力したい - Windows編

Windowsで円記号( ¥ )とバックスラッシュ( \ )を区別して入力したいんだけど・・・もう、歴史的な経緯から日本では円記号とバックスラッシュ記号はともに半角の「¥」として取り扱うように多くのシステムが作られていて、ホントやんなっちゃう 

現状調査結果

まずは、調査結果のまとめ

[ 間違っていませんように (-人-) ]


Windows 8 での扱い
名称 記号 文字コード キーボード入力 フォント別
ディスプレイ表示
Unicode UTF-8 シフトJIS 日本語
キーボード
US International
キーボード
MS Gothic
(多く日本語フォント)
Ariel
円記号 ¥ U+00A5 0xC2A5 0x005C 直接入力は
不可?
右ALT + -
(マイナス記号)
¥ ¥
バックスラッシュ \ U+005C 0x005C 文字コード上
存在しない
¥ または \ \ ¥ \


問題点

単純明快である。

日本語キーボード上のバックスラッシュを入力しても円記号が表示される
あるいは、円記号を入力してもバックスラッシュが表示される。


アホすぎ

多くの日本人は円記号を入力していると思っているが実際にはバックスラッシュを入力しており、画面上のフォント表示で誤魔化されていることに気がついていない。それゆえに、「バックスラッシュが入力できない」と言い出す。入力できないのは円記号の方である。日本人が円記号と思って入力したデータを海外の人が見るとそれはバックスラッシュに見える。言葉が通じない。ガラパゴスにもほどがある。 井の中の蛙、アスペルガー。

技術的には、日本語キーボードJP106/JP109では円記号とバックスラッシュ記号の両方のキーが存在しており、キースキャンコードも異なる値が割り振られている。しかし、これら日本語キーボードをWindows OSの0411系日本語キーボードレイアウトとして通常使う限り、円記号のキーを打ってもバックスラッシュのキーを入力しても、Windowsアプリケーションの多くではバックスラッシュ(0x005C)のデータを入力する。(もちろん表示は円記号)

なお、Hyper-VのゲストLinuxはLinuxの設定を正しく行えば円記号とバックスラッシュを(Windows上の)Hyper-Vコンソールで区別して入力かつ表示可能である。



円記号の入力方法

WindowsではLinuxのようにキーマッピングを変更する手段はなさそうなので
次にいくつかの方法を考えてみた。

1.Character Map (文字コード表) を使用する方法




Character Map を起動する



上部のフォント選択でArielを選択して右側の円記号(¥)を選択する。
すると、左下に選択された文字コード(U+00A5)が表示されるので、これを確認してから
Select ボタンをクリックする。




SelectボタンをクリックするとCopy ボタンが有効になるので、Copyボタンをクリックして円記号(¥)をコピー。


使用したいアプリケーションでPasteする。



2.IME Pad を使用する方法


使用したいアプリケーションを開いてから、言語バーからIME Padを起動する



左上部でUnicode (BMP) -> Basic Latinを選択

右上部でフォントをArielに設定
U+00A0行にある「¥」記号をクリックすると、アプリケーション側に円記号(U+00A5)がPasteされる。




3.日本語キーボードを US International keyboard として使用する方法

コントロールパネルの言語(Language)の選択で
英語と日本語の両方を使用する設定を行い、
IMEで言語を普段使用している日本語(JP)から英語(EN)に切り替えて
日本語キーボードをUS International keyboard として使用する方法。

コントロールパネルの設定


言語の選択で英語を追加し、Input Method として US International keyboard layout を選択する。





入力手順

1.IMEの言語を英語(EN)に切り替える。


2.右ALTキーとマイナスキーを同時に押す。

3.IMEの言語をもとに戻す。




4.IMEに円記号( ¥ )を語彙登録して日本語IMEから入力する方法

すでに説明したCharacter Map(文字コード表) か IME Pad を利用して円記号(¥, U+00A5)を語彙登録して使用する方法。
Microsoft IMEでは機種依存文字として既に半角円記号が登録されていた。
Google IMEにはなかったので登録して使用している。
変換候補の表示ではGoogle IMEの方がわかりやすい。





参考サイト
US International Keyboard での円記号の入力方法
http://symbolcodes.tlt.psu.edu/accents/codeint.html