MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

日本発のリナックス企業、ミラクル・リナックスで奮闘する社員のブログです。

ミラクル関連リンク

採用情報

サイト検索

最近のトラックバック

2008年7月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

« ナイトマラソン出走 | メイン | mallocで取ったメモリ(2) »

MacOS X ファイル名と convmv

こんにちは moriyama です。

convmv というファイル名文字コード変換ツールがあります。

この convmv は、Perl で記述されていて MacOS X の Decomposed UTF-8 (Modified NFD) を変換できるように、--nfc と --nfd オプションが指定できるようになっています。それぞれ、Perl の Unicode::Normalize モジュールの NFC および NFD の正規化処理を呼び出しています。

Unicode::Normalize モジュールは、Unicode 規格の正規化処理をそのまま実装したものですのですので、前回の記事 MacOS X とのファイル共有 で書いたように、U+2000~U+2FFF、U+F900~U+FAFF、U+2F800~U+2FAFF の扱いが MacOS X のファイル名と正規化の方法が異なり注意する必要があります。

具体的にどのような所に注意する必要があるのか調べてみました。

調査対象とした文字集合

  • JIS X 0213:2004
  • JIS X 0212-1990
  • マイクロソフト標準キャラクタセット

調査結果

表1 に示す文字が正規合成 (NFC) による正規化処理で別のコードポイントに置換されてしまう事が確認されました。

この事からMacOS X のファイル名を convmv の --nfc オプションで変換する際には、このような置換が行われる事を認識して使用すべきという事になります。

ちなにみ JIS X 0212-1990 は Unicode の正規化処理の影響を受けないことが確認されました。

表1 正規化処理比較表
文字JIS X 0213:2004
面-区-点
CP932
コード値
Unicode
コード値
NFCNFDMacOS X の
ファイル名
1-11-39 U+1F71ά U+03ACά U+03B1 U+0301ά U+03B1 U+0301
1-11-49 U+1F73έ U+03ADέ U+03B5 U+0301έ U+03B5 U+0301
1-02-820x81F0 U+212BÅ U+00C5 U+0041 U+030A U+212B
1-86-27 U+F91D U+6B04 U+6B04 U+F91D
1-84-14 U+F928 U+5ECA U+5ECA U+F928
1-85-460xFAE0 U+F929 U+6717 U+6717 U+F929
1-91-47 U+F936 U+865C U+865C U+F936
1-86-41 U+F970 U+6BBA U+6BBA U+F970
1-94-04 U+F9D0 U+985E U+985E U+F9D0
1-93-610xFBE9 U+F9DC U+9686 U+9686 U+F9DC
1-15-550xFA9C U+FA10 U+585A U+585A U+FA10
0xFAD8 U+FA12 U+6674 U+6674 U+FA12
1-87-580xFB58 U+FA15 U+51DE U+51DE U+FA15
1-87-790xFB5E U+FA16 U+732A U+732A U+FA16
0xFB75 U+FA17 U+76CA U+76CA U+FA17
0xFB7D U+FA18 U+793C U+793C U+FA18
1-89-280xFB7E U+FA19 U+795E U+795E U+FA19
1-89-290xFB80 U+FA1A U+7965 U+7965 U+FA1A
1-89-330xFB82 U+FA1B U+798F U+798F U+FA1B
0xFB86 U+FA1C U+9756 U+9756 U+FA1C
0xFB89 U+FA1D U+7CBE U+7CBE U+FA1D
0xFB92 U+FA1E U+7FBD U+7FBD U+FA1E
2-87-240xFB9F U+FA20 U+8612 U+8612 U+FA20
1-92-140xFBA9 U+FA22 U+8AF8 U+8AF8 U+FA22
0xFBB4 U+FA25 U+9038 U+9038 U+FA25
1-92-740xFBB7 U+FA26 U+90FD U+90FD U+FA26
0xFBF6 U+FA2A U+98EF U+98EF U+FA2A
0xFBF7 U+FA2B U+98FC U+98FC U+FA2B
0xFBF9 U+FA2C U+9928 U+9928 U+FA2C
0xFC49 U+FA2D U+9DB4 U+9DB4 U+FA2D
1-14-24 U+FA30 U+4FAE U+4FAE U+FA30
1-14-41 U+FA31 U+50E7 U+50E7 U+FA31
1-14-48 U+FA32 U+514D U+514D U+FA32
1-14-67 U+FA33 U+52C9 U+52C9 U+FA33
1-14-72 U+FA34 U+52E4 U+52E4 U+FA34
1-14-78 U+FA35 U+5351 U+5351 U+FA35
1-15-12 U+FA36 U+559D U+559D U+FA36
1-15-15 U+FA37 U+5606 U+5606 U+FA37
1-15-22 U+FA38 U+5668 U+5668 U+FA38
1-15-58 U+FA39 U+5840 U+5840 U+FA39
1-15-62 U+FA3A U+58A8 U+58A8 U+FA3A
1-47-65 U+FA3B U+5C64 U+5C64 U+FA3B
1-47-66 U+FA3C U+5C6E U+5C6E U+FA3C
1-84-48 U+FA3D U+6094 U+6094 U+FA3D
1-84-60 U+FA3E U+6168 U+6168 U+FA3E
憎1-84-62 U+FA3F U+618E U+618E憎 U+FA3F
1-84-65 U+FA40 U+61F2 U+61F2 U+FA40
1-85-08 U+FA41 U+654F U+654F U+FA41
1-85-11 U+FA42 U+65E2 U+65E2 U+FA42
1-85-35 U+FA43 U+6691 U+6691 U+FA43
1-85-69 U+FA44 U+6885 U+6885 U+FA44
1-86-73 U+FA45 U+6D77 U+6D77 U+FA45
1-86-87 U+FA46 U+6E1A U+6E1A U+FA46
1-87-05 U+FA47 U+6F22 U+6F22 U+FA47
1-87-53 U+FA48 U+716E U+716E U+FA48
2-80-09 U+FA49 U+722B U+722B U+FA49
1-88-05 U+FA4A U+7422 U+7422 U+FA4A
1-89-07 U+FA4B U+7891 U+7891 U+FA4B
1-89-19 U+FA4C U+793E U+793E U+FA4C
1-89-20 U+FA4D U+7949 U+7949 U+FA4D
1-89-23 U+FA4E U+7948 U+7948 U+FA4E
1-89-24 U+FA4F U+7950 U+7950 U+FA4F
1-89-25 U+FA50 U+7956 U+7956 U+FA50
1-89-27 U+FA51 U+795D U+795D U+FA51
1-89-31 U+FA52 U+798D U+798D U+FA52
1-89-32 U+FA53 U+798E U+798E U+FA53
1-89-45 U+FA54 U+7A40 U+7A40 U+FA54
1-89-49 U+FA55 U+7A81 U+7A81 U+FA55
1-89-68 U+FA56 U+7BC0 U+7BC0 U+FA56
1-90-14 U+FA57 U+7DF4 U+7DF4 U+FA57
2-84-48 U+FA58 U+7E09 U+7E09 U+FA58
1-90-19 U+FA59 U+7E41 U+7E41 U+FA59
1-90-26 U+FA5A U+7F72 U+7F72 U+FA5A
1-90-36 U+FA5B U+8005 U+8005 U+FA5B
1-90-56 U+FA5C U+81ED U+81ED U+FA5C
2-85-84 U+FA5D U+8279 U+8279 U+FA5D
2-85-85 U+FA5E U+8279 U+8279 U+FA5E
1-91-07 U+FA5F U+8457 U+8457 U+FA5F
1-91-79 U+FA60 U+8910 U+8910 U+FA60
1-91-89 U+FA61 U+8996 U+8996 U+FA61
1-92-15 U+FA62 U+8B01 U+8B01 U+FA62
1-92-16 U+FA63 U+8B39 U+8B39 U+FA63
1-92-24 U+FA64 U+8CD3 U+8CD3 U+FA64
1-92-29 U+FA65 U+8D08 U+8D08 U+FA65
2-89-73 U+FA66 U+8FB6 U+8FB6 U+FA66
1-92-57 U+FA67 U+9038 U+9038 U+FA67
1-93-67 U+FA68 U+96E3 U+96E3 U+FA68
1-93-86 U+FA69 U+97FF U+97FF U+FA69
1-93-91 U+FA6A U+983B U+983B U+FA6A

convmv の MacOS X 対応実験パッチ

convmv の --nfd と --nfc オプションで MacOS X ファイル名互換の正規化処理を行うようにする修正パッチを実験的に作ってみました。

※あくまで動作確認のため実験的に作成したパッチですので無保証です。実際に使う場合は自己責任でお願いいたします。

convmv-1.10-macosx.patchをダウンロード

ごく簡単なテストですが、UTF-8 に変換した CP932 の全文字を --nfc オプションで変換しても CJK互換漢字 (U+F900〜U+FAFF) が保存される事を確認できました。また、JIS X 0213:2004 に関しては、表2 の 2文字以外は保存される事が確認できました。

表2 JIS X 0213:2004 と MacOS X ファイル名
文字JIS X 0213:2004
面-区-点
CP932
コード値
Unicode
コード値
NFCNFDMacOS X の
ファイル名
1-11-39 U+1F71ά U+03ACά U+03B1 U+0301ά U+03B1 U+0301
1-11-49 U+1F73έ U+03ADέ U+03B5 U+0301έ U+03B5 U+0301

MacOS X ファイル名に関する情報は少ないため苦労している方も多いかと思いますが、基本的には MacOS X 固有の処理は MacOS X 自身で処理できないか? という事を考えて、それが出来ない場合の次善の策としてどのような対応が良いのかという事を考えるようにし必要以上に問題が拡散しないようにすると良いでしょう。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/10290215

このページへのトラックバック一覧 MacOS X ファイル名と convmv:

コメント

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.