python数据要输中文吗?
需要使用中文就输入中文,大多数情况下应该是用不着的。
首先,Python 3内部str采用Unicode编码,不是UTF-8编码。Unicode是字符编码,UTF-8是字符传输编码(当然也用于文件存储),二者不是一个概念。在Unicode出现之前,字符编码和字符传输编码没有区别,比如ASCII,GBK、BIG5等等。Unicode编码不用于直接传输或存储,对应于Unicode的传输编码有UTF-8、UTF-16、UTF-32等多种格式,通常采用UTF-8编码,在Unicode编码小于256时,与ASCII编码完全一致,兼容性好,而且传输量也比UTF-16、UTF-32要小。
在Python 2时代,Python的str对象是简单的字节流,默认ASCII编码,无法直接打印非ASCII字符,unicdoe对象内部采用Unicode编码,才支持非ASCII字符打印。对于非ASCII字符需要decode()指定编码转换unicode,输出时encode()转换为具体传输编码,用于显示、保存、传输。
Python 3时代,str对象内部采用unicode实现,相当于Python 2的unicode对象,同时用bytes对象来表示原始的字节流也就是原始的传输或者存储的字节。Python 3默认的传输和存储字节流是UTF-8编码,也就是说,不指定原始字节流编码的情况下,Python 3自动按照UTF-8解码原始字节流,并自动转换为Unicode字符编码用于内部处理。同样,输出时如果不指定编码,也会自动转换为UTF-8编码格式(不一定正确,再某些系统上,Python 会检测运行环境的编码,自动转换为环境的默认编码)。
因此,Python 3 强烈建议,在传输和存储时都采用UTF-8编码,这样就无需考虑字符编码的问题。
为了与其他系统或者软件兼容,Python 3同样提供了decode()、encode()函数用于Unicode与其他传输编码的转换。并且,对open()函数增加了encoding参数,用于非UTF-8编码的文件读写的支持。
所以,你要清楚的是,原始数据文件的编码格式。如果是UTF-8编码,使用Python 3时无需考虑编码问题。如果是GB2312 、GBK等那么就有两种方式,一是指定encoding参数打开,得到的str对象;或者以二进制,即mode参数指定'b',得到bytes对象,再decode()解码,转换为unicode对象。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有