谈谈Python源文件的编码

官方入门教程->2.2.1 源文件的字符编码

参考官网:https://docs.python.org/zh-cn/3.9/tutorial/interpreter.html

默认情况下,Python 源码文件的编码是 UTF-8。

如果不使用默认编码,则要声明文件的编码,文件的 第一 行要写成特殊注释。句法如下:

 # -*- coding: encoding -*-

其中,encoding 可以是参考附录1

比如,声明使用 Windows-1252 编码,源码文件要写成:

 # -*- coding: cp1252 -*-

第一行 的规则也有一种例外情况,源码以 UNIX “shebang” 行开头。此时,编码声明要写在文件的第二行。例如:

 #!/usr/bin/env python3
 # -*- coding: cp1252 -*-

语言参考->2.1.4编码声明

Python 脚本第一或第二行的注释匹配正则表达式 **coding[=:]\s*([-\w.]+)**时,该注释会被当作编码声明;这个表达式的第一组指定了源码文件的编码。编码声明必须独占一行,在第二行时,则第一行必须也是注释。编码表达式的形式如下:

 # -*- coding: <encoding-name> -*-

这也是 GNU Emacs 认可的形式,此外,还支持如下形式:

 # vim:fileencoding=<encoding-name>

这是 Bram Moolenaar 的 VIM 认可的形式。

没有编码声明时,默认编码为 UTF-8。此外,如果文件的首字节为 UTF-8 字节顺序标志(b'\xef\xbb\xbf'),文件编码也声明为 UTF-8(这是 Microsoft 的 notepad 等软件支持的形式)

附录1: codesc

编码别名语言
ascii646, us-ascii英语
big5big5-tw, csbig5繁体中文
big5hkscsbig5-hkscs, hkscs繁体中文
cp037IBM037, IBM039英语
cp273273, IBM273, csIBM273德语3.4 新版功能.
cp424EBCDIC-CP-HE, IBM424希伯来语
cp437437, IBM437英语
cp500EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500西欧
cp720阿拉伯语
cp737希腊语
cp775IBM775波罗的海语言
cp850850, IBM850西欧
cp852852, IBM852中欧和东欧
cp855855, IBM855保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
cp856希伯来语
cp857857, IBM857土耳其语
cp858858, IBM858西欧
cp860860, IBM860葡萄牙语
cp861861, CP-IS, IBM861冰岛语
cp862862, IBM862希伯来语
cp863863, IBM863加拿大语
cp864IBM864阿拉伯语
cp865865, IBM865丹麦语/挪威语
cp866866, IBM866俄语
cp869869, CP-GR, IBM869希腊语
cp874泰语
cp875希腊语
cp932932, ms932, mskanji, ms-kanji日语
cp949949, ms949, uhc韩语
cp950950, ms950繁体中文
cp1006乌尔都语
cp1026ibm1026土耳其语
cp11251125, ibm1125, cp866u, ruscii乌克兰语3.4 新版功能.
cp1140ibm1140西欧
cp1250windows-1250中欧和东欧
cp1251windows-1251保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
cp1252windows-1252西欧
cp1253windows-1253希腊语
cp1254windows-1254土耳其语
cp1255windows-1255希伯来语
cp1256windows-1256阿拉伯语
cp1257windows-1257波罗的海语言
cp1258windows-1258越南语
euc_jpeucjp, ujis, u-jis日语
euc_jis_2004jisx0213, eucjis2004日语
euc_jisx0213eucjisx0213日语
euc_kreuckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001韩语
gb2312chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58简体中文
gbk936, cp936, ms936统一汉语
gb18030gb18030-2000统一汉语
hzhzgb, hz-gb, hz-gb-2312简体中文
iso2022_jpcsiso2022jp, iso2022jp, iso-2022-jp日语
iso2022_jp_1iso2022jp-1, iso-2022-jp-1日语
iso2022_jp_2iso2022jp-2, iso-2022-jp-2日语,韩语,简体中文,西欧,希腊语
iso2022_jp_2004iso2022jp-2004, iso-2022-jp-2004日语
iso2022_jp_3iso2022jp-3, iso-2022-jp-3日语
iso2022_jp_extiso2022jp-ext, iso-2022-jp-ext日语
iso2022_krcsiso2022kr, iso2022kr, iso-2022-kr韩语
latin_1iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1西欧
iso8859_2iso-8859-2, latin2, L2中欧和东欧
iso8859_3iso-8859-3, latin3, L3世界语,马耳他语
iso8859_4iso-8859-4, latin4, L4波罗的海语言
iso8859_5iso-8859-5, cyrillic保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
iso8859_6iso-8859-6, arabic阿拉伯语
iso8859_7iso-8859-7, greek, greek8希腊语
iso8859_8iso-8859-8, hebrew希伯来语
iso8859_9iso-8859-9, latin5, L5土耳其语
iso8859_10iso-8859-10, latin6, L6北欧语言
iso8859_11iso-8859-11, thai泰语
iso8859_13iso-8859-13, latin7, L7波罗的海语言
iso8859_14iso-8859-14, latin8, L8凯尔特语
iso8859_15iso-8859-15, latin9, L9西欧
iso8859_16iso-8859-16, latin10, L10东南欧
johabcp1361, ms1361韩语
koi8_r俄语
koi8_t塔吉克3.5 新版功能.
koi8_u乌克兰语
kz1048kz_1048, strk1048_2002, rk1048哈萨克语3.5 新版功能.
mac_cyrillicmaccyrillic保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语
mac_greekmacgreek希腊语
mac_icelandmaciceland冰岛语
mac_latin2maclatin2, maccentraleurope, mac_centeuro中欧和东欧
mac_romanmacroman, macintosh西欧
mac_turkishmacturkish土耳其语
ptcp154csptcp154, pt154, cp154, cyrillic-asian哈萨克语
shift_jiscsshiftjis, shiftjis, sjis, s_jis日语
shift_jis_2004shiftjis2004, sjis_2004, sjis2004日语
shift_jisx0213shiftjisx0213, sjisx0213, s_jisx0213日语
utf_32U32, utf32所有语言
utf_32_beUTF-32BE所有语言
utf_32_leUTF-32LE所有语言
utf_16U16, utf16所有语言
utf_16_beUTF-16BE所有语言
utf_16_leUTF-16LE所有语言
utf_7U7, unicode-1-1-utf-7所有语言
utf_8U8, UTF, utf8, cp65001所有语言
utf_8_sig所有语言
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxianfeng023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值