Python源文件的编码
阅读原文时间:2023年07月08日阅读:1

Python源文件的编码

参考官网: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 -*-

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

 # -*- coding: -*-

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

 # vim:fileencoding=

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

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

编码

别名

语言

ascii

646, us-ascii

英语

big5

big5-tw, csbig5

繁体中文

big5hkscs

big5-hkscs, hkscs

繁体中文

cp037

IBM037, IBM039

英语

cp273

273, IBM273, csIBM273

德语3.4 新版功能.

cp424

EBCDIC-CP-HE, IBM424

希伯来语

cp437

437, IBM437

英语

cp500

EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500

西欧

cp720

 

阿拉伯语

cp737

 

希腊语

cp775

IBM775

波罗的海语言

cp850

850, IBM850

西欧

cp852

852, IBM852

中欧和东欧

cp855

855, IBM855

保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语

cp856

 

希伯来语

cp857

857, IBM857

土耳其语

cp858

858, IBM858

西欧

cp860

860, IBM860

葡萄牙语

cp861

861, CP-IS, IBM861

冰岛语

cp862

862, IBM862

希伯来语

cp863

863, IBM863

加拿大语

cp864

IBM864

阿拉伯语

cp865

865, IBM865

丹麦语/挪威语

cp866

866, IBM866

俄语

cp869

869, CP-GR, IBM869

希腊语

cp874

 

泰语

cp875

 

希腊语

cp932

932, ms932, mskanji, ms-kanji

日语

cp949

949, ms949, uhc

韩语

cp950

950, ms950

繁体中文

cp1006

 

乌尔都语

cp1026

ibm1026

土耳其语

cp1125

1125, ibm1125, cp866u, ruscii

乌克兰语3.4 新版功能.

cp1140

ibm1140

西欧

cp1250

windows-1250

中欧和东欧

cp1251

windows-1251

保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语

cp1252

windows-1252

西欧

cp1253

windows-1253

希腊语

cp1254

windows-1254

土耳其语

cp1255

windows-1255

希伯来语

cp1256

windows-1256

阿拉伯语

cp1257

windows-1257

波罗的海语言

cp1258

windows-1258

越南语

euc_jp

eucjp, ujis, u-jis

日语

euc_jis_2004

jisx0213, eucjis2004

日语

euc_jisx0213

eucjisx0213

日语

euc_kr

euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001

韩语

gb2312

chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso-ir-58

简体中文

gbk

936, cp936, ms936

统一汉语

gb18030

gb18030-2000

统一汉语

hz

hzgb, hz-gb, hz-gb-2312

简体中文

iso2022_jp

csiso2022jp, iso2022jp, iso-2022-jp

日语

iso2022_jp_1

iso2022jp-1, iso-2022-jp-1

日语

iso2022_jp_2

iso2022jp-2, iso-2022-jp-2

日语,韩语,简体中文,西欧,希腊语

iso2022_jp_2004

iso2022jp-2004, iso-2022-jp-2004

日语

iso2022_jp_3

iso2022jp-3, iso-2022-jp-3

日语

iso2022_jp_ext

iso2022jp-ext, iso-2022-jp-ext

日语

iso2022_kr

csiso2022kr, iso2022kr, iso-2022-kr

韩语

latin_1

iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1

西欧

iso8859_2

iso-8859-2, latin2, L2

中欧和东欧

iso8859_3

iso-8859-3, latin3, L3

世界语,马耳他语

iso8859_4

iso-8859-4, latin4, L4

波罗的海语言

iso8859_5

iso-8859-5, cyrillic

保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语

iso8859_6

iso-8859-6, arabic

阿拉伯语

iso8859_7

iso-8859-7, greek, greek8

希腊语

iso8859_8

iso-8859-8, hebrew

希伯来语

iso8859_9

iso-8859-9, latin5, L5

土耳其语

iso8859_10

iso-8859-10, latin6, L6

北欧语言

iso8859_11

iso-8859-11, thai

泰语

iso8859_13

iso-8859-13, latin7, L7

波罗的海语言

iso8859_14

iso-8859-14, latin8, L8

凯尔特语

iso8859_15

iso-8859-15, latin9, L9

西欧

iso8859_16

iso-8859-16, latin10, L10

东南欧

johab

cp1361, ms1361

韩语

koi8_r

 

俄语

koi8_t

 

塔吉克3.5 新版功能.

koi8_u

 

乌克兰语

kz1048

kz_1048, strk1048_2002, rk1048

哈萨克语3.5 新版功能.

mac_cyrillic

maccyrillic

保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语

mac_greek

macgreek

希腊语

mac_iceland

maciceland

冰岛语

mac_latin2

maclatin2, maccentraleurope, mac_centeuro

中欧和东欧

mac_roman

macroman, macintosh

西欧

mac_turkish

macturkish

土耳其语

ptcp154

csptcp154, pt154, cp154, cyrillic-asian

哈萨克语

shift_jis

csshiftjis, shiftjis, sjis, s_jis

日语

shift_jis_2004

shiftjis2004, sjis_2004, sjis2004

日语

shift_jisx0213

shiftjisx0213, sjisx0213, s_jisx0213

日语

utf_32

U32, utf32

所有语言

utf_32_be

UTF-32BE

所有语言

utf_32_le

UTF-32LE

所有语言

utf_16

U16, utf16

所有语言

utf_16_be

UTF-16BE

所有语言

utf_16_le

UTF-16LE

所有语言

utf_7

U7, unicode-1-1-utf-7

所有语言

utf_8

U8, UTF, utf8, cp65001

所有语言

utf_8_sig

 

所有语言