最新消息:VPS服务器又从fzhost.net换回Linode了,主题仍用朋友推荐的大前端D8

【整理】关于Python中自动识别字符串编码,并正确在cmd中输出的各种情况的测试

StringEncoding crifan 1193浏览 0评论

已经听说了,Python 3.x,对于文件的编码,支持的很好了,很多时候都可以自动检测,并正确存储为unicode字符串了。

并且在windows 的cmd中,也都可以正常输出显示,不会出现编码错误了。

所以,对此部分,特意去测试一下,通过代码,得到下面的各种情况的结果:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Function:
【整理】关于Python中自动识别字符串编码,并正确在cmd中输出的各种情况的测试
https://www.crifan.com/python_3_x_auto_handle_string_encode_and_decode_to_and_from_unicode_then_output_to_cmd

Author: Crifan
Version: 2012-11-19

Note:
1. 当前测试环境:
win xp SP3 + cmd + 默认编码为GBK

"""

testGbkStr = "此处只是测试中文是否可以在cmd中正常输出显示";
print("testGbkStr=",testGbkStr);

# 1. 结果证实,当文件本身编码为GBK,但是没有GBK编码声明时,直接输出,会出错的:
#  File "G:\python\cn_print\cn_print.py", line 2
#SyntaxError: Non-UTF-8 code starting with '\xb5' in file G:\python\cn_print\cn_print.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

# 2。 现在给开始添加上gbk编码声明,看看是否可以正常在cmd中输出
#此时,就是可以正常输出的:
#testGbkStr= 此处只是测试中文是否可以在cmd中正常输出显示

# 3. 再去把编码声明改为UTF-8,且把文件编码也同时转换为UTF-8,再去看看是否可以正常输出
#结果也是可以正常输出的:
#testGbkStr= 此处只是测试中文是否可以在cmd中正常输出显示

# 4.把文件本身编码改为GBK,但是编码声明改为utf-8,看看结果如何:
#结果显示:
#  File "G:\python\cn_print\cn_print.py", line 7
#SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte

# 5. 把文件本身编码改为UTF-8,但是把文件声明改为GBK,看看输出效果:
#结果显示:
#  File "G:\python\cn_print\cn_print.py", line 1
#SyntaxError: 'gbk' codec can't decode bytes in position 59-60: illegal multibyte sequence

【总结】

如果你正确声明(指定)了文件编码的话,那么python 3.x中对于你所写的字符串,默认会自动解析并存储为Unicode的,所有后期的各种处理,包括在cmd中的输出,都会很好的自动转换为对应的编码并输出显示的,比如输出到cmd中,会自动转换为cmd的GBK编码,得以正确显示的。

 

当然,如果你本身,像我测试中的那样,文本内容本身的实际编码和所声明的编码不一致(比如文件是GBK,但声明为UTF-8,或文件是UTF-8,但声明为GBK),则肯定会有对应的编码错误,Python无法正常解析你的py文件的。

转载请注明:在路上 » 【整理】关于Python中自动识别字符串编码,并正确在cmd中输出的各种情况的测试

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
13 queries in 0.211 seconds, using 10.38MB memory