タイトルの通り。初めは ruby 使ってて気づいたんですが、いわゆる全角円記号といわゆる全角オーバーラインが化ける気がする。
$ echo $LANG
ja_JP.eucJP
$ nkf --version
Network Kanji Filter Version 2.1.0 (2009-11-17)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2009, The nkf Project.
$ echo -n "¥" | od -x
0000000 efa1
0000002
# nkf で UTF-8 に変換
$ echo -n "¥" | nkf -Ew | od -x
0000000
a5c20000002
# iconv で UTF-8 に変換
$ echo -n "¥" | iconv -f EUC-JP -t UTF-8 | od -x
0000000
bfef 00a50000003
$ echo -n " ̄" | od -x
0000000 b1a1
0000002
# nkf で UTF-8 に変換
$ echo -n " ̄" | nkf -Ew | od -x
0000000
80e2 00be #=> いわゆる半角オーバーラインのコード
0000003
# iconv で UTF-8 に変換
$ echo -n " ̄" | iconv -f EUC-JP -t UTF-8 | od -x
0000000
bfef 00a3 #=> こっちが正しい
0000003
あれ? "¥"って 0xC2 0xA5 でいいんじゃなかったっけ?
もしかして変わったとか?
もうちょっと調べる。
【追記】4/17
「--ms-ucs-map」を付ければいいらしい。
$ echo $LANG
ja_JP.eucJP
$ echo -n "¥" | nkf -Ew --ms-ucs-map | xxd -g 1
0000000: ef bf a5
[02:42:59]bash:~/work
$ echo -n " ̄" | nkf -Ew --ms-ucs-map | xxd -g 1
0000000: ef bf a3
※ でも、そうすると今度は他の文字が化ける(「化ける」という言い方は不適切かも知れませんが)。
以下余談。
調べてて、こんなページを見つけました。
「Linux の16進ダンプツール(od,xxd)」xxd なんて便利なコマンド、初めて知った。ずっとバカの一つ覚えで "od -x" してました…。
上記のサイトに書いてあることそのままですが、
xxd の凄い所は、16進から文字に戻せるところ。
$ echo "文字列" | xxd -p | xxd -r -p
文字列
こんな便利なコマンドを知らなかったとは…。悔しい。
ちなみに、 od でも
$ echo -n "¥" | od -tx1
0000000 ef bf a5
0000003
と、並び順を戻せるが、man od を見ると、「od は hexdump(1) に取って代わられています。」と思いっきり書かれてました。
今後は xxd を使います。
posted by vagus at 00:45| 東京 ☁|
Comment(0)
|
TrackBack(0)
|
Linux
|
![このブログの読者になる](https://blog.seesaa.jp/img/fan_read.gif)
|