English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。(python3已经没有这个问题了,python3默认的文件编码是UTF-8)
必须将编码注释放在第一行或者第二行,一般来说,Python文件的前两行要这样写:
#!/usr/bin/python # -*- coding: UTF-8 -*-
其中第一行是指定python解释器,第二行是指定python文件编码方式,设置编码方式有以下可选的方法
1. 带等号的设置方法:
#!/usr/bin/python # coding=<encoding name>
2. 最常见的,带冒号的(大多数编辑器都可以正确识别的):
#!/usr/bin/python # -*- coding: <encoding name> -*-
3. vim的:
#!/usr/bin/python # vim: set fileencoding=<encoding name> :
L'impostazione della dichiarazione di codifica di testa ha i seguenti effetti:
Se ci sono commenti in cinese nel codice, è necessaria questa dichiarazione
Editor più avanzati (ad esempio, il mio emacs) basano il formato del file di codice su questa dichiarazione di testa.
Il programma decodifica l'inizializzazione dell'oggetto unicode 'La vita è breve', attraverso la dichiarazione di testa, (quindi la dichiarazione di testa e il formato di archiviazione del codice devono essere coerenti)
Impostare il formato di decodifica predefinito
import sys # Importa il modulo sys, non è la prima volta che viene caricato reload(sys) # Ricarica sys sys.setdefaultencoding('utf8') ## Chiamata alla funzione setdefaultencoding
Ecco un'attenzione speciale per la seconda riga reload(sys), questa non può mancare. Senza di essa, il codice non può essere eseguito correttamente. Allora perché ricaricare e non direttamente chiamare la funzione? Poiché la funzione setdefaultencoding viene eliminata dopo essere stata chiamata dal sistema, quindi quando viene importata tramite import non esiste più, quindi è necessario ricaricare il modulo sys, in modo che setdefaultencoding sia disponibile e possa modificare la codifica di caratteri corrente dell'interprete nel codice.
Nel percorso del directory di installazione di Python, c'è una cartella chiamata Lib,在里面 c'è un file chiamato site.py, dove si può trovare main() –> setencoding() –> sys.setdefaultencoding(encoding). Poiché questo site.py viene caricato automaticamente ogni volta che si avvia l'interprete Python, la funzione main viene eseguita ogni volta, e la funzione setdefaultencoding viene eliminata.
Riguardo a sys.defaultencoding, questo viene utilizzato quando non si specifica chiaramente il metodo di decodifica. Ad esempio, ho il seguente codice:
#! /usr/bin/env python # -*- coding: utf-8 -*- s = '中文' # Attenzione: qui str è di tipo str, non unicode s.encode('gb18030')
Questo codice ricodifica s nel formato gb18030, ossia la conversione unicode -> str. Poiché s è già di tipo str, quindi
Python automaticamente decodifica s come unicode e poi lo codifica in gb18030. Poiché la decodifica è eseguita automaticamente da Python, non abbiamo specificato il metodo di decodifica, Python utilizzerà il metodo indicato da sys.defaultencoding per decodificare. In molti casi, sys.defaultencoding è
ASCII, if s is not this type, an error will occur. In the above case, my sys.defaultencoding is ascii, and the encoding method of s is consistent with the file encoding method, which is utf8, so an error occurred:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
For this situation, there are two methods to correct the error:
Firstly, explicitly indicate the encoding method of s
#! /usr/bin/env python # -*- coding: utf-8 -*- s = '中文' s.decode('utf-8').encode('gb18030')
Secondly, change sys.defaultencoding to the file encoding method
#! /usr/bin/env python # -*- coding: utf-8 -*- import sys reload(sys) # Python2.5 After initialization, the sys.setdefaultencoding method will be deleted, we need to reload it sys.setdefaultencoding('utf-8') str = '中文' str.encode('gb18030')
The above method of setting the file encoding format of Python is all the editor shares with everyone, hoping to provide a reference for everyone, and also hope that everyone will support and cheer for the tutorial.
Declaration: The content of this article is from the Internet, the copyright belongs to the original author, the content is contributed and uploaded by Internet users spontaneously, this website does not own the copyright, does not undergo manual editing, nor assume relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (when sending an email, please replace # with @) to report, and provide relevant evidence. Once confirmed, this site will immediately delete the suspected infringing content.