python解释器采用什么编码_Python解释器假设的代码的默认编码方法是什么?

如果没有任何显式的编码声明,源代码的假定编码将是ascii用于python2.x

utf-8用于python3.x

对于python2.x,请参见PEP 0263和Using source code encoding,对于python3.x,请参见PEP 3120的新默认值utf-8

因此,源代码的默认编码将直接依赖于Python解释器的版本,而且它是不可配置的。在

请注意,源代码编码与将非ASCII字符作为字符串数据的一部分进行处理完全不同。在

在两种不同的情况下,您可能会遇到非ASCII字符:作为程序数据的一部分,在运行时

作为源代码的一部分(由于标识符中不能有非ASCII字符,这通常意味着源代码或注释中包含硬编码的字符串数据)。在

源代码编码声明会影响解释源代码的编码方式,因此只有当您决定将非ASCII字符直接放入源代码时才需要它。在

因此,以下代码最终将不得不处理data.txt中可能存在非ASCII字符的事实:with open('data.txt') as f:

for line in f:

# do something with `line`

但是它在源代码中不包含任何非ASCII字符,因此它不需要在文件顶部使用编码声明。但是,如果要将line转换为unicode,则需要正确解码line。简单地执行unicode(line)将使用系统默认编码,即ascii(与默认源代码编码不同,但碰巧也是ascii)。所以要使用utf-8显式地解码字符串,您需要执行line.decode('utf-8')。在

但是,此代码的源代码中不直接包含非ASCII字符:

^{pr2}$

它将以类似于此的SyntaxError失败,除非您声明一个显式的源代码编码:

^{3}$

因此,假设您的文本编辑器配置为将文件保存在utf-8中,则需要将以下行# -*- coding: utf-8 -*-

在文件的顶部,以便Python正确解释源代码。在

不过,我的建议是,一般不要在源代码中使用非ASCII字符,因为如果它取决于您和您的同事的编辑器和终端设置,那么它的写入和读取是否正确。在

相反,您可以使用转义字符串在代码中安全地输入非ASCII字符:TEST_DATA = 'B\xc3\xa4r'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值