Macで作った濁点・半濁点入りのファイル名をWindowsで扱うときの罠
Macでファイルやフォルダを作成して、それをメールで送ったり、LAN経由で取り込む際にしばしば「ファイル名の文字化け」が起こります。これはMacの文字コードが「UTF-8-Mac」であるために起こります。
特に厄介なのは、濁点・半濁点入りのファイル名です。例えば「ハンドバッグ.jpeg」とか「ペペロンチーノ.gif」とかの場合です。
「UTF-8-Mac」では、濁点・半濁点文字、例えば「ド」を「ト」と「゛」、「ぺ」を「へ」と「゜」を合成して表現します。つまり、文字コードが異なるわけです。
しかし、Windowsのエクスプローラーでは、これをちゃんと認識して「パパとじいじ.jpg」と言う風に、違和感無く表示してくれちゃいます。
ここまでは「Windows賢いな~」なんですが、この後が厄介。
この「パパとじいじ.jpg」のパスをAccessやExcelなどに登録しておいて、検索ワードとして「パパ」と打ち込んで検索しようとすると、この「パパとじいじ.jpg」は検索に引っかかってしません。打ち込んだ「パパ」とDBに登録されている「ハ゜ハ゜」は文字コードが違うからです。Windows上での見た目はちゃんと表示されているのに、文字コード上は違っているという・・・。
そこで、Macの濁点・半濁点を1文字濁点・半濁点文字に強引に変換するVBAを作ってみました。
Function macDakuten(str As String) As String '文字コード「UTF-8-Mac」の「濁点なし」+「濁点・半濁点」 '⇒「濁点・半濁点付き1文字」に変換 '例:「か」+「゛」⇒「が」 「は」+「゜」⇒「ぱ」 '「ウ」+「゛」⇒「ヴ」 '「か行」「さ行」「た行」「は行」のひらがな(25文字)と 'カタカナ(25文字)、それと「ゔ」「ヴ」が対象となる '16進数の文字コードに変換して、濁点は「文字コードに1を加える」、 '半濁点は「文字コードに2を加える」 '2文字を1文字に(濁点・半濁点部分は削除) If IsNull(str) then Exit Sub Dim i As Long Dim arrHira() As String Dim arrKata() As String Dim h as String, k as String 'ひらがな、カタカナ (濁点なし) Dim h1 as String, k1 as String 'ひらがな、カタカナ(濁点あり) Dim h2 as String ,k2 as String 'ひらがな、カタカナ(半濁点あり) arrHira = Split("4B,4D,4F,51,53,55,57,59,5B,5D,5F,61,64,66,68,6F,72,75,78,7B", ",") arrKata = Split("AB,AD,AF,B1,B3,B5,B7,B9,BB,BD,BF,C1,C4,C6,C8,CF,D2,D5,D8,DB", ",") For i = 0 To 19 '濁点を付けられる「かな文字」を「濁点なし」+「濁点」⇒「濁点付き1文字」に変換 h = ChrW(CLng(Val("&H30" & arrHira(i)))) 'ひらがな濁点なし k = ChrW(CLng(Val("&H30" & arrKata(i)))) 'カタカナ濁点なし h1 = ChrW(CLng(Val("&H30" & arrHira(i)) + 1)) 'ひらがな濁点あり k1 = ChrW(CLng(Val("&H30" & arrKata(i)) + 1)) 'カタカナ濁点あり h2 = ChrW(CLng(Val("&H30" & arrHira(i)) + 2)) 'ひらがな半濁点あり k2 = ChrW(CLng(Val("&H30" & arrKata(i)) + 2)) 'カタカナ半濁点あり str = Replace(str, h & ChrW(&H3099), h1, , , vbBinaryCompare) str = Replace(str, k & ChrW(&H3099), k1, , , vbBinaryCompare) If i > 14 Then '「はひふへほ」なら半濁点もあり str = Replace(str, h & ChrW(&H309A), h2, , , vbBinaryCompare) str = Replace(str, k & ChrW(&H309A), k2, , , vbBinaryCompare) End If Next '「ゔ」と「ヴ」 str = Replace(str, ChrW(&H3046) & ChrW(&H3099), ChrW(&H3094), , , vbBinaryCompare) str = Replace(str, ChrW(&H30A6) & ChrW(&H3099), ChrW(&H30F4), , , vbBinaryCompare) macDakuten = str End Function
ってな感じ。ユーザーにファイル名などを登録させたら、一度この関数を通してから再登録する、といった使い方ができると思います。
APPLE MacBook Air 1.7GHz Core i5/11.6/4G/64GB MD223J/A
- 出版社/メーカー: アップル
- 発売日: 2012/06/13
- メディア: Personal Computers
- クリック: 7回
- この商品を含むブログを見る