😊

UTF-8非対応のFTPサーバに接続する

2024/08/21に公開

はじめに

あるFTPサーバから定期的にファイルを取得する処理をPythonで書くことになりました。
実装をすすめると、ファイルを取得する箇所でUnicodeErrorが発生しました。
もしやとサーバに向けてopts utf8 on コマンドを送信するとレスポンスが451。
ファイル名エンコードをcp932に設定しないといけませんでした。

環境

Python 3.12.5
Amazon Linux 2023

エンコード設定

下記のコードでmlsd(リスト取得)、retrbinary(バイナリファイル取得)まで確認できました。

from ftplib import FTP
ftp = FTP(FTP_ADDRESS, user=USER_ID, passwd=PASSWORD, encoding='cp932')

古い記事だとインスタンス生成前に設定したり、

FTP.encoding = "cp932"

ログイン後に下記のように設定するものもありましたが、

ftp.encoding = "cp932"

私の環境では、retrbinary処理でUnicodeErrorになりました。

Discussion