文号
t79950
阅读
7761
回复
3
收藏
1
Python在Windows中的编码问题
2016/05/15
IP:四川
在Python 2.x中,在GBK源文件中使用中文并不会有问题,因为Python 2.x字符串是按字节处理的。
不建议使用UTF-8编码的源文件,否则可能会有大量乱码问题产生。
如果需要使用Unicode字符串(比如u"\u2432"),在输出到控制台时,必须encode为对应编码,防止报错。

在Python 3.x中,字符串默认是Unicode的,输出到控制台之前,必须encode为对应编码,防止报错。
在Python 3.x中使用UTF-8编码的源文件是没有问题的。

控制台对应编码可以如下获得:
if sys.stdout.isatty()
    default_encoding = sys.stdout.encoding
else
    default_encoding = locale.getpreferredencoding()

也就是说:
Python 2.x在Windows中需要以GBK保存源文件,在Linux中需要使用UTF-8保存源文件。
Python 3.x在Windows和Linux中均可使用UTF-8保存源文件,但控制台I/O时要注意手动转码,避免在Windows中频繁报错。
acmilan作者
10年7个月前IP:四川
819392
1楼
简体中文Windows中的C语言本地编码只能是GBK。如果需要大量使用UTF-8,建议使用基于unicode字符串的语言(如c#/java/python3/nodejs)或改用linux或cygwin平台。
如需少量使用UTF-8,只需.decode("utf-8").encode("cp936")即可。
引用
评论
acmilan作者
10年7个月前修改于 10年7个月前IP:四川
819415
2楼
某些软件不支持Unicode路径的话,可以给他们分配一个Everyone可控制的英文路径,比如在C:\Windows\Temp\随机ASCII。。。
这个路径用户不能列出文件(资源管理器打不开),但是可以在这里边创建文件,所以实际上是可以使用的。。。
引用
评论
acmilan作者
10年7个月前修改于 10年7个月前IP:四川
819499
3楼
在Windows下:
Python 2.7要以GBK保存
Python 3.x要以GBK或UTF-8保存

在Linux或Mac OS X下:
Python 2.7要以UTF-8保存
Python 3.x要以UTF-8保存
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的