質問: open("st2.txt", "w", encoding="utf-8") >>> st.write("パイソンからこんにちは!") 12 >>> st.close() ``` catでファイルを確認 ``` cat st2.txt パイソンからこんにちは!⏎ ``` cf. Pythonでマルチバイト文字を扱う際に気をつける点。 https://gist.github.com/devlights/4561968 この辺りの情報が参考になりそうでしたが、 なぜインタラクティブシェルでは文字化けせず、 スクリプトとして実行したら文字化けするのか(振る舞いを変えるのか?) 理由がよくわかりませんでした。 追記: 09-p126.pyのエンコード?はISO-2022-JP (LF)と出ました。 vimにて:set enc? とすれば、 encoding=utf-8 と出ていたのですが。 .vimrcでは set enc=utf-8 set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8 set fileformats=unix,dos,mac と書いていますが、これが原因でしょうか。 ``` nkf --guess 09-p126.py ISO-2022-JP (LF) file -i 09-p126.py 09-p126.py: text/x-python; charset=us-ascii ``` OSはCentOS release 6.9 です。 ``` cat /etc/redhat-release CentOS release 6.9 (Final) ```
回答: 基本的に、「ちゃんと実行できていれば」同じ結果になります。同じ結果にならなければ、何かしら問題があります。 * ちゃんとpython3を使っているか?(これに関しては大丈夫そうですが) * 同じインタプリタで実行しているか? * ファイルの文字コードは正しくUTF-8になっているか? * shellの文字コードはUTF-8か? あたりを確認してください。