【便利】右クリックツールを作ろう!- Shift-JISをUTF-8に一括変換
概要
今日は、日ごろのちょっとした手作業を減らすツールの紹介をします!
作成したソースファイルにShift-JISのものが混ざってしまっていること、たまにあると思います。
そこで、今まで作ったファイルを一括でUTF-8に変更するスクリプトを作ってみました。
スクリプト
以下の2つのファイルを、同じフォルダに保存してください。
文字コードを変換したいフォルダまたはファイルをbatの方にドラッグ&ドロップすれば、まとめて変換してくれます。
(フォルダの中は、再帰的に探索されて、すべてのファイルが変換されます)
shiftjis_to_utf8.py
import os
import sys
import chardet
def convert_to_utf8(file_paths):
for file_path in file_paths:
# パスがディレクトリの場合、再帰的に検索
if os.path.isdir(file_path):
for root, dirs, files in os.walk(file_path):
for file in files:
full_path = os.path.join(root, file)
process_file(full_path)
else:
process_file(file_path)
def process_file(file_path):
# ファイルの存在を確認
if not os.path.isfile(file_path):
print(f"File does not exist: {file_path}")
return
# ファイルの内容をバイナリモードで読み込む
with open(file_path, 'rb') as file:
raw_data = file.read()
# 文字コードを推定
encoding = chardet.detect(raw_data)['encoding']
if encoding is None:
print(f"Failed to detect encoding for file: {file_path}")
return
# 文字コードがShift-JISならUTF-8に変換
if encoding.lower() == 'shift_jis' or encoding.lower() == 'shift-jis':
try:
# Shift-JISからUTF-8にデコード・エンコード
decoded_data = raw_data.decode('shift_jis')
utf8_data = decoded_data.encode('utf-8')
# 同じファイル名でUTF-8として保存
with open(file_path, 'wb') as file:
file.write(utf8_data)
print(f"Converted {file_path} to UTF-8.")
except UnicodeDecodeError:
print(f"Unicode decode error encountered in file: {file_path}")
else:
print(f"No conversion needed for file: {file_path} (detected encoding: {encoding})")
if __name__ == '__main__':
# コマンドライン引数からファイルパスのリストを取得
if len(sys.argv) > 1:
file_paths = sys.argv[1:] # 最初の引数はスクリプト名なので除外
convert_to_utf8(file_paths)
else:
print("No files provided.")
shiftjis_to_utf8.bat
@echo off
setlocal
:: バッチファイルが存在するディレクトリを取得
set "script_dir=%~dp0"
:: バッチファイルの名前から拡張子を除いた名前を取得
set "script_name=%~n0"
:: 同じディクトリの同名Pythonファイルを実行
python "%script_dir%%script_name%.py" %*
endlocal
pause
右クリックショートカットに登録するとさらに便利!
shiftjis_to_utf8.bat を右クリックしてショートカットを作成し、
Windowsキー + R を押して、「shell:sendto」と入力して、出てきたフォルダにショートカットを配置します。ショートカットの名前はわかりやすく日本語にしてOKです。
すると、ファイルやフォルダを右クリック(Windows11以降はShift+右クリック)で出てくる「送る」のところに、先ほどのショートカットが登場します。
ドラッグ&ドロップしたのと同じ扱いになっているので、もうバッチがどこにあるのかを気にしなくてOKです!
おわりに
今回のように、面倒な手作業を見つけたら、できるだけその時に汎用スクリプトを作っておくようにしています。
その時1回の手間は増えますが、長期的に見ると時間の節約になると思います。ツールは資産!
付録:スクリプトはGPT-4に書いてもらいました
6回の指示で、所望のスクリプトが出来上がりました!
自分でコードは一切書いていません。
この記事が気に入ったらサポートをしてみませんか?