LoginSignup
1
0

ファイル名を日本語でつけた際にNFD正規化された文字をNFC正規化形式に変換したい

Last updated at Posted at 2024-03-30

はじめに

日本語を含むファイル名を作成しており、そのファイル名の長さを知りたい時がありました。(もっといい方法があるかも知れませんが、) wc -m を使って数えていたところ、濁点・半濁点を含むファイル名だと正しくカウントできていないことが分かりました。調べてみると、NFD正規化されているために、濁点・半濁点を含む文字だと基底文字と結合文字の組み合わせで表現されるため、2 文字扱いになっていることが分かりました。NFC/NFDの違いについては、ファイルアップロードではNFC/NFD問題に気をつけろ!~MacファイルシステムにおけるUnicode正規化の闇~ に書かれていますので、ご参照ください。

そこで、NFD正規化されているファイル名をNFC正規化形式に変換するプログラムを書きました。

環境

  • Python 3.10.13

変換プログラムの実装例

参考実装では、プログラムと同じディレクトリに image フォルダが存在している前提で、そのフォルダ内にある画像を変換します。

標準出力などはさせていないので、何も表示されなければ成功となります。

なお、githubにも上げていますので、適宜ご参照ください。

import os
import unicodedata

dir_path = 'image'

files = os.listdir(dir_path)

for file in files:
    nfc_file_name = unicodedata.normalize("NFC", file).encode("utf-8")
    os.rename(os.path.join(dir_path, file),
              os.path.join(dir_path.encode(encoding='utf-8'), nfc_file_name))

参考

  1. ファイルアップロードではNFC/NFD問題に気をつけろ!~MacファイルシステムにおけるUnicode正規化の闇~
  2. Unicode正規化 #文字コード - Qiita
1
0
0

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
1
0