LoginSignup
5
4

More than 5 years have passed since last update.

Macのファイル名に使われるNFDなUTF-8(通称UTF-8-MAC)を通常のUTF-8に変換

Last updated at Posted at 2017-02-25

Mac だとファイル名に濁音や半濁音が2文字扱いになる ので、いろいろと困ることがあります[^1]。な のでフツーの UTF-8 に戻したい ですね
というメモです。

やりかた

くわしいことはさておき、2行で済ませます。

NKF ライブラリでやる

require 'nkf'
filename_utf_8 = NKF.nkf('--ic=UTF-8-MAC -w', filename_utf_8_mac)

String#encode でやる(2017/2/27追記)

Ruby 1.9以降だとあんまり NKF でやるのはどうかな、と思いますし、コメントでもご指摘頂きましたので、(NKF ライブラリを使わずに) String#encode でやってみましょう。

filename_utf_8 = filename_utf_8_mac.encode(Encoding::UTF_8, Encoding::UTF8_MAC)

気付いたのは Encoding::UTF_8 って書くところ。Encoding::UTF8 じゃダメなんです。でも Encoding::UTF_8_MACEncoding::UTF8_MAC でもいいんです。なんでよぉ。

参考

オプション文字列

-j -s -e -w -w16 出力するエンコーディングを指定する
  -w UTF-8 を出力する(BOMなし)

--ic=input_codeset 入力のエンコーディングを指定します。
                   以下のエンコーディングが利用可能です。
                   ここでの名前の指定には大文字小文字は無視されます。
  UTF-8-MAC これは入力側にしか指定できません

module NKF (Ruby 2.3.0)

[^1]: コメント頂いたように、「Dir.glob とかで取れるパス名は UTF8」であり、特に困らなかったので削除。 Ruby メンテナたちに改めて感謝。

5
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4