运行时环境:Python 2.7、Windows 7
注意:我说的是 PYTHON 源代码生成的文件的编码(不是说 PYTHON 源文件的编码),PYTHON 源文件顶部声明的编码确实与 PYTHON 源文件的编码一致得救了。
当 string() 中没有非 ascii 字符时content = 'abc'
,文件( file.txt
,而不是 PYTHON 源文件)在 之后以 ANSI 编码保存fp.close()
,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 编码保存,尽管我在 PYTHON 源文件(不是)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)
有没有证据表明它的行为是这样的?