Edited at

Macでファイル名をコピペすると濁点と半濁点がおかしくなる

More than 1 year has passed since last update.


2018-01-04 追記

PDFからコピペした時など、エディタで普通に変換したくなって試していたところ、もっとシンプルにできました。

「選択されたテキストを出力で置き換える」が便利です。

Kobito.232f9r.png


概要

Macでファイル名をコピペすると濁点と半濁点がおかしくなる。("パ" -> "ハ" + "半濁点"の2文字になる)

Sublime Textだと表示がおかしいので気づくことができるけど、Atomだと表示はおかしくならないので気づけない。困った。

Kobito.yC6wid.png

Menubar_と_パン_と_Macでファイル名をコピペすると濁点と半濁点がおかしくなる.png

Menubar_と_untitled_-_Atom_と_Settings_-__Users_matsushimadaisuke_src_github_com_miraitechno_pocketkarte_pocketkarte-mdb3_-_Atom.png


原因

MacOSのファイルシステムであるHFS+が使用している、UTF-8の正規化方法が「NFD」というもので、2文字に分けて正規化されてしまうことが原因。

参考

* UTF-8にもいろいろある - ザリガニが見ていた...。

* MacOSX - Mac OS X の NFD 問題での対策諸々 - Qiita


対策

nkfで--ic=UTF8-MACオプションを指定することで、NFD -> NFCに変換できる。

$ echo "コピペしたもの" | od -tx1c

0000000 e3 82 b3 e3 83 92 e3 82 9a e3 83 98 e3 82 9a e3
** **** **** **** **** **
0000020 81 97 e3 81 9f e3 82 82 e3 81 ae 0a
** **** **** **** ** \n
0000034

$ echo "コピペしたもの" | nkf --ic=UTF8-MAC | od -tx1c
0000000 e3 82 b3 e3 83 94 e3 83 9a e3 81 97 e3 81 9f e3
** **** **** **** **** **
0000020 82 82 e3 81 ae 0a
** **** ** \n
0000026


よし、Automatorでサービスを作ってショートカットキーを当てよう。

Automatorで新規サービスを作成する。

Kobito.9lZVy1.png

nkfに-wオプションをつけないと標準入力に渡されてこなかった。なぜ?

Kobito.5cNnPH.png

システム環境設定 -> キーボードで作成したサービスのショートカットを設定する

Kobito.eYPu1g.png

$ echo "/Users/matsushimadaisuke/Desktop/コピペしたもの /Users/matsushimadaisuke/Desktop/コピペしたもの" | od -tx1c

0000000 2f 55 73 65 72 73 2f 6d 61 74 73 75 73 68 69 6d
/ U s e r s / m a t s u s h i m
0000020 61 64 61 69 73 75 6b 65 2f 44 65 73 6b 74 6f 70
a d a i s u k e / D e s k t o p
0000040 2f e3 82 b3 e3 83 94 e3 83 9a e3 81 97 e3 81 9f
/ コ ** **** **** **** **** **
0000060 e3 82 82 e3 81 ae 20 2f 55 73 65 72 73 2f 6d 61
** **** ** / U s e r s / m a
0000100 74 73 75 73 68 69 6d 61 64 61 69 73 75 6b 65 2f
t s u s h i m a d a i s u k e /
0000120 44 65 73 6b 74 6f 70 2f e3 82 b3 e3 83 94 e3 83
D e s k t o p / コ ** **** ****
0000140 9a e3 81 97 e3 81 9f e3 82 82 e3 81 ae 0a
**** **** **** **** ** \n
0000156

あれ?うまくいってるけど、2回コピーされてる、、、