Python3 - UnicodeEncodeError:でとても困った挙句解決した話

2018-07-31 07:25:16 922

日本語の記事がどうしても保存できない

さくらサーバーでブログをアップすると、

日本語のブログ記事を保存しようとすると必ず以下のエラーに見舞われてしまい、困っていた。

エラーの内容

UnicodeEncodeError: 'ascii' codec can't encode characters in position 315-323: ordinal not in range(128)

どうしたいいやら・・・。
まだまだブログ復活には遠いかもしれない。

viエディタを使った.cshrcファイルを覗く


コマンドライン(ターミナル)を起動して

SSHでさくらサーバーにログイン

ssh sample@sample.sakura.ne.jp

以下のコマンドでviエディタから.cshrcファイルを起動することができる。

vi .cshrc
今回の目的は、使う言語のエンコーディング設定を見たかったのだが、
setenv LANG en_US.UTF-8
と書いてあり、どうやらutf-8で設定できていたみたいだった。

他に試したこと

import sys
import codecs
sys.stdin = codecs.getreader('utf_8')(sys.stdin)
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)

なんてことも試してみたが、こんどはフォームから受け取ったデータの読み込みエラーらしきものが。

TypeError: write() argument must be str, not bytes
なんやねん。

書き出し時のエンコーディングだった

プログラムコードを改めて見てみると、

間違い箇所

with open("sample.md", 'w') as f:
f.write(content)

これだ・・・。
1年前、さんざん苦労したテキストファイルへの書き出し時に指定するとても初歩的なミスでした。

正しいコード

with open("sample.md", 'w', encoding='utf-8') as f:
f.write(content)

これで正解。
やったー直ったぞー!

関連記事