ランタイム環境: Python 2.7、Windows 7
注: PYTHON ソース コードによって生成されたファイルのエンコーディングについて話している (PYTHON ソース ファイルのエンコーディングについては話していない)。救われました。
文字列( )にASCII以外の文字が含まれていない場合content = 'abc'
、ファイル( file.txt
PYTHONソースファイルではなく)はfp.close()
の後にANSIエンコーディングで保存されます。PYTHONファイル(およびANSIエンコーディング形式で保存されます)の内容は次のとおりです:
## Author: melo
## Email:prevision@imsrch.tk
## Date: 2012/10/12
import os
def write_file(filepath, mode, content):
try:
fp = open(filepath, mode)
try:
print 'file encoding:', fp.encoding
print 'file mode:', fp.mode
print 'file closed?', fp.closed
fp.write(content)
finally:
fp.close()
print 'file closed?', fp.closed
except IOError, e:
print e
if __name__ == '__main__':
filepath = os.path.join(os.getcwd(), 'file.txt')
content = 'abc'
write_file(filepath, 'wb', content)
ただし、string( ) に ASCII 以外の文字が含まれているcontent = 'abc莹'
場合、 file( )file.txt
は の後に UTF-8 エンコーディングで保存されfp.close()
ます。このときの PYTHON ソースファイルの内容は以下のとおりです。file.txt
#encoding=gbk
# -*- encoding: gbk -*-
## Author: melo
## Email:prevision@imsrch.tk
## Date: 2012/10/12
import os
def write_file(filepath, mode, content):
try:
fp = open(filepath, mode)
try:
print 'file encoding:', fp.encoding
print 'file mode:', fp.mode
print 'file closed?', fp.closed
fp.write(content)
finally:
fp.close()
print 'file closed?', fp.closed
except IOError, e:
print e
if __name__ == '__main__':
filepath = os.path.join(os.getcwd(), 'file.txt')
content = 'abc莹'
write_file(filepath, 'wb', content)
それがこのように振る舞うという証拠はありますか?