Pythonのインタラクティブシェルでファイルの書き込みを実行した場合と、
Bash上でPythonスクリプトを実行した場合とで、
文字化けする理由について、いまいちしっくり来てません。
09-p126.pyの中身
Python3.6
1#!/usr/bin/python3.6 2# -*- coding: utf-8 -*- 3 4st = open("st2.txt", "w", encoding="utf-8") 5st.write("パイソンからこんにちは!") 6st.close()
上記スクリプトをbash上で実行し、catでファイルを確認
bash
1python3.6 09-p126.py 2cat st2.txt 3%Q%$%=%s$+$i$3$s$K$A$O!⏎
Pythonのインタラクティブシェルで同様の処理を実行
python3.6
1>>> st = open("st2.txt", "w", encoding="utf-8") 2>>> st.write("パイソンからこんにちは!") 312 4>>> st.close()
catでファイルを確認
bash
1cat st2.txt 2パイソンからこんにちは!⏎
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
と書いていますが、これが原因でしょうか。
bash
1nkf --guess 09-p126.py 2ISO-2022-JP (LF) 3file -i 09-p126.py 409-p126.py: text/x-python; charset=us-ascii
OSはCentOS release 6.9 です。
bash
1cat /etc/redhat-release 2CentOS release 6.9 (Final)
回答3件
あなたの回答
tips
プレビュー