[高手请进] 关于python源文件编码声明和源文件编码格式的作用分析
在以下四个py文件,源代码都是:
if __name__ == '__main__':
str1 = '哈哈'
str2 = u'哈哈'
print 'str1:repr(str1):%s' % repr(str1)
print 'str1:%s' % str1
print 'str1:repr(str2):%s' % repr(str2)
print 'str2:%s' % str2
将这段代码存为以下四个文件:
gbk_bgk.py:源文件编码格式和编码声明都为GBK
gbk_utf8.py:源文件编码格式为GBK,编码声明为UTF-8
utf8_gbk.py:源文件编码格式为UTF-8,编码声明为GBK
utf8_utf8.py:源文件编码格式和编码声明都为:UTF-8
运行这四个文件结果如下:
D:\Test>gbk_bgk.py
str1:repr(str1):'\xb9\xfe\xb9\xfe'
str1:哈哈
str1:repr(str2):u'\u54c8\u54c8'
str2:哈哈
D:\Test>gbk_utf8.py
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: unexpected code byte
D:\Test>utf8_gbk.py
str1:repr(str1):'\xe5\x93\x88\xe5\x93\x88'
str1:鍝堝搱
str2,code:[u'\u935d\u581d\u6431']
str2:repr(str2):u'\u935d\u581d\u6431'
str2:鍝堝搱
D:\Test>utf8_utf8.py
str1:repr(str1):'\xe5\x93\x88\xe5\x93\x88'
str1:鍝堝搱
str1:repr(str2):u'\u54c8\u54c8'
str2:哈哈
为什么结果会是这样呢?其是‘哈‘字的在各编码格式下面的编码如下:
Unicode:C854
UTF-8:E59388
GBK:B9FE
四个文件和结果可以在从附件中下载。