見出し画像

CSVファイルをUTF-16に変換するKeyboard Maestroマクロ

UTF-8でエンコーディングされたCSVファイルをエクセルで開くと文字化けすることがあります。その場合には、UTF-16に変換するのですが、この作業が面倒い… 課題のネタ帳に君臨してきた課題を解決できましたので共有します。

結論からいうと、Finderでファイルを選択し、次のマクロを実行することで元のファイル名の末尾に「-UTF16」が付いたファイルを生成します。

解説

選択したファイルを対象にする

「For Each Path in a Finders selection」アクションで選択したファイルを1つずつ扱います。

親ディレクトリ、名前、拡張子を変数に入れる

「For Each Path in a Finders selection」アクションで参照した「Local__PathList」から親ディレクトリ、名前、拡張子を、それぞれの変数に入れます。

  • 親ディレクトリ:Local__Parent

  • 名前:Local__BaseName

  • 拡張子:Local__Ext

ファイルの中身を読む

「Read a File」アクションを使って「For Each Path in a Finders selection」アクションで参照したファイルの中身を読み、変数「Local_contents」にいれます。

「UTF-16」のエンコードで書き出す

「Write to a File」アクションで、変数「Local_contents」をファイルに書き出します。[and encoding]を「UTF-16」にします。

ファイル名は、次のように指定します。「For Each Path in a Finders selection」アクションで分解した変数を再構築しつつ、ファイル名の末尾に「-UTF16」が入るようにします。

  • 親ディレクトリ:Local__Parent

  • 名前:Local__BaseName

  • 拡張子:Local__Ext

%Variable%Local__Parent%/%Variable%Local__BaseName%-UTF16.%Variable%Local__Ext%

拡張子を限定する

選択したファイルの拡張子が、「次のいずれかだったら」に限定しましょう。

  • txt

  • csv

  • tsv

  • rtf

(txt|csv|tsv|rtf)

Path Finderの場合

Path Finderでは「For Each Path in a Finders selection」アクションが使えないため、For eachアクションで「Lines in collection」を使います。

制約など

  • 複数ファイルに対応します。

  • 書き出し先にすでにファイル名があるとき、上書きしません。

  • ファイルを選択していないとき、アラートは出るとよいかもだけど、出ません。

  • 指定した拡張子以外の場合、アラートは出るとよいかもだけど、出ません。

  • そもそも、AutomatorやShortcutsでやる事案かも…

追記

文字コードではなく、BOMの問題?

ダウンロード

Finderのみの簡易版

フル版

キーボードショートカットは「command + control + option + ;」に設定しています。適宜変更してお使いください。

ここから先は

0字 / 1ファイル

¥ 100

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5