python3中默认的字符编码和文件编码_python3 unicod,utf-8,gbk的编码和解码中文显示问题...

目的:

清楚了解为什么在python3不同的编码,解码,windows,linux操作系统下,字符是否能够正确显示。

前提:

了解不同编码用不同的二级制编码和长度来表示字符。

在python3中,各种字符编码之间的互相转换都要通过unicode作为中间编码转换。gbk转换成unicode,再从unicode转换成utf-8。

分析:

要区分4种编码解码概念,

1.编写代码文件时的编码。

notepad++ 在菜单“编码”中有选择,在状态栏可以看到编码类型。

pycharm 在菜单"file","editor","file encoding"中可以设置默认编码。在状态栏可以看到编码类型。

2.python3代码中申明的解码格式。

在代码中#coding=gbk。

编码声明告诉了python编译器以什么格式的编码来解码.py文件,它不会改变系统默认编码和本地默认编码,

也不是用于声明当前代码文件的编码格式的,而是声明当前代码文件的解码方式。换句话说,

代码文件的编码格式取决于你使用的编辑器,而如何解码该文件取决于文件头处的编码声明。

一般地,编码格式应当与解码格式一致,即编辑器的编码格式与编码声明应当一致。

注:根据代码中申明的解码类型,pycharm会自动改变编码类型,让编码类型和解码类型保持一致。这是pycharm的优点。

3.python解释器的默认编码格式。

当python的编译器读取.py文件时,若无编码声明,则使用系统默认编码来解码.py文件。

用 import sys, sys.getdefaultencoding() 查看

4.本地默认编码

本地指的才是操作系统,因此本地默认编码即操作系统的默认编码。

显然,python编译器的默认编码在不同的操作系统中保持一致,操作系统的默认编码随操作系统的不同而发生了改变。

用import locale, locale.getdefaultlocale()查看。 windows是gbk, linux是utf-8。

例子1:

python3 一个中文字符串(str=‘中‘)utf-8编码,代码申明解码为GBK,代码中用gbk写到(文件系统write方法)另外一个文件f2,在linux中显示的过程。

分析:

python3代码文件用utf-8编码中文字符 ”中“ 为 b‘\xe4\xb8\xad‘

python3解释器用代码申明GBK读取 b‘\xe4\xb8\xad‘, 得到 乱码字符串(unicode形式,字符串在内存中为unicode编码), 假如为字符%。

python3代码用GBK编码 将字符%对于的GBK编码b‘\xe4\xb8\xad‘写入文件f2

linux终端用uft-8打开 b‘\xe4\xb8\xad‘,能正常显示

例子2:

python3 一个中文字符串(str=‘中‘)utf-8编码,代码申明解码为GBK,代码中用uft-8写到(文件系统write方法)另外一个文件f2,在linux中显示的过程。

分析:

python3代码文件用utf-8编码中文字符 ”中“ 为 b‘\xe4\xb8\xad‘

python3解释器用代码申明GBK读取 b‘\xe4\xb8\xad‘, 得到 乱码字符串(unicode形式,字符串在内存中为unicode编码), 假如为字符%。

python3代码用uft-8编码,将字符%对应的utf-8编码(肯定不是 b‘\xe4\xb8\xad‘的二进制数值了),写入文件f2

linux终端用uft-8打开一个不是b‘\xe4\xb8\xad‘的编码,不能正常显示。

参考文章:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值