2文字濁音(NFD)で発狂せずに1文字濁音(NFC)へ変換しCSVで出力する方法
Windowsユーザーから送られてきたファイルなどをmacで確認すると、濁音が2文字濁音として表示されて…困った経験はないですか?
僕はあります!笑
指定したフォルダのサブフォルダとファイル名を取得し二文字濁音を一文字濁音へ変換してcsvで出力する方法を紹介します!
まずはnkfをインストールしよう!
ターミナルで以下のコマンドを入力します。
$ brew install nkf
homebrewのインストールがまだな人は以下よりインストールしてください!
Homebrew
ここからはShellScript
toNfcCsv.sh
#!/bin/bash
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
for i in "$@"
do
make_csv "$i"
done
解説
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
findコマンド
#!/bin/bash
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
for i in "$@"
do
make_csv "$i"
done
make_csv()
{
dir="$1"
find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}
findコマンドで指定したフォルダのサブフォルダ、ファイルを取得し|
で標準入力としてnkf -wLu --ic=UTF8-MAC
へ渡します。
NFD→NFCへの変換
nkf -wLu --ic=UTF8-MAC
では、--ic=UTF8-MAC
で入力文字コードをNFD(UTF8-MAC)として受け取り、-w
でUTF8コード(NFC)として出力します。-Lu
改行コードを「LF」として出力するオプションです。
UTF8-MACについては以下を参考にしました!
UTF-8-MAC とは、Mac OS X に付属する iconv にて利用できる文字エンコードの一つで、 Normalization Form D (NFD) で符号化した UTF-8 のことを指します。 一般に UTF-8 とだけいった場合には、Normalization Form C (NFC) でエンコードされたものを意味します。
引用:UTF-8-MAC
つまり、-w
オプションはNormalization Form C (NFC)として出力することになります
ここでは、UTF-8(UTF-8-MAC(NFD))をUTF-8(NFC)へ変換したことになります。
csvファイルの作成
nkf -s > ${dir}.csv
では、Shift JISで出力した値を新たにcsvファイルで書き出すようにしています。Shift JISで書き出す意味あるの? と思うそこのあたな! nkf -wLu --ic=UTF8-MAC
の標準出力をcsvへ書き出してみて下さい……。
一応解説
for i in "$@"
do
make_csv "$i"
done
複数フォルダを指定した場合にも対応できるようにしています。
↓こんな感じ!
$ ./toNfcCsv.sh フォルダ1 フォルダ2
最後に
単純にテキストファイルとして出力したい場合は以下でokです
nkf -wLu --ic=UTF8-MAC > ${dir}.txt
Githubでコードアップしたので良かったら使ってみてください!
https://github.com/masanorifunaki/bash-toNfcCsv
参考
Author And Source
この問題について(2文字濁音(NFD)で発狂せずに1文字濁音(NFC)へ変換しCSVで出力する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/masanorifunaki/items/060d24c58ecd8550f22b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .