


Detaillierte Erläuterung der Unterschiede und Nutzungsanalyse zwischen str und Unicode bei der Python-Codierungsverarbeitung
Verwenden Sie Python, um Chinesisch zu verarbeiten, beim Lesen von Dateien oder Nachrichten, wenn verstümmelte Zeichen (Zeichenfolge gefunden werden), Dateien lesen und schreiben, print), was die meisten Leute zum Debuggen aufrufen, ohne explizit darüber nachzudenken, warum verstümmelte Zeichen auftreten. Heute werden wir besprechen, wie man mit Codierungsproblemen umgeht.
Hinweis: Die folgende Diskussion bezieht sich auf Python2.
Zunächst einmalmuss ein allgemeines Konzept vorliegen und denTraceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position 0: ordinal not in range(128)
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1: ordinal not in range(128)
Hinweise zur Zeichenkodierung: ASCII, Unicode und UTF-8
str und unicode str und unicode sind beide Unterklassen von base
string
Es gibt also eine Möglichkeit zu bestimmen, ob es sich um einen String handelt
def is_str(s): return isinstance (s, Basiszeichenfolge)
str und Unicode-Konvertierung str -> unicode unicode -> encode('the_coding_you_want') -> 🎜>
Differenzstr ist eine Bytefolge, die von Unicode übergeben wird Deklarationsmethode bestehend aus codierten BytesErmitteln Sie die Länge (geben Sie die Anzahl zurück). Bytes)
Unicode ist die wahre Bedeutung Eine Zeichenfolge bestehend aus Zeichen Deklarationsmethode>>> s = ‘中文‘ s = u‘中文‘.encode(‘utf-8‘) >>> type(‘中文‘) <type ‘str‘>
>>> u‘中文‘.encode(‘utf-8‘) ‘\xe4\xb8\xad\xe6\x96\x87‘ >>> len(u‘中文‘.encode(‘utf-8‘)) 6
>>> s = u‘中文‘ >>> s = ‘中文‘.decode(‘utf-8‘) >>> s = unicode(‘中文‘, ‘utf-8‘) >>> type(u‘中文‘) <type ‘unicode‘>
>>> u‘中文‘ u‘\u4e2d\u6587‘ >>> len(u‘中文‘) 2
>>> isinstance(u‘中文‘, unicode) True >>> isinstance(‘中文‘, unicode) False >>> isinstance(‘中文‘, str) True >>> isinstance(u‘中文‘, str) False
IDE und Die Konsole meldet einen Fehler Beim Drucken stimmt die Kodierung nicht mit der IDE-eigenen Kodierung überein.
>>> ‘中文‘.encode(‘utf-8‘) Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128) >>> u‘中文‘.decode(‘utf-8‘) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1: ordinal not in range(128)
#s是code_A的str s.decode(‘code_A‘).encode(‘code_B‘)
Editor
, Dateikodierung, DatenbankdatentabellenkodierungStellen Sie die Kodierung der Codequelldatei sicherDies ist sehr wichtigDie Standardkodierung der py-Datei ist ASCII. Wenn in der Quellcodedatei Nicht-ASCII-Zeichen verwendet werden, müssen diese verwendet werden im Dateikopf codiert Deklarationsdokument
>>> print u‘中文‘.encode(‘gbk‘) ???? >>> print u‘中文‘.encode(‘utf-8‘) 中文
Wenn nicht deklariert, treten bei der Eingabe von Nicht-ASCII-Dateien Fehler auf, die in der ersten oder zweiten Zeile der Datei
Deklaration platziert werden müssen MethodeWenn der Header „coding=utf-8, a = ‚Chinese‘“ deklariert, ist seine Codierung utf-8Wenn der Header „coding=gb2312, a = „Chinese“ deklariert ', seine Kodierung ist gbk
also haben alle Quelldatei-Header im selben Projekt eine einheitliche Kodierung, und die deklarierte Kodierung muss mit der in der Quelldatei gespeicherten Kodierung übereinstimmen (bezogen auf den Editor)
wird als hartcodierte Zeichenfolge für die Verarbeitung im Quellcode verwendet, einheitlich Unicode verwenden
将其类型和源文件本身的编码隔离开, 独立无依赖方便流程中各个位置处理
if s == u‘中文‘: #而不是 s == ‘中文‘ pass #注意这里 s到这里时,确保转为unicode
以上几步搞定后,你只需要关注两个 unicode和 你设定的编码(一般使用utf-8)
处理顺序
1. Decode early 2. Unicode everywhere 3. Encode later
相关模块及一些方法
获得和设置系统默认编码
>>> import sys >>> sys.getdefaultencoding() ‘ascii‘ >>> reload(sys) <module ‘sys‘ (built-in)> >>> sys.setdefaultencoding(‘utf-8‘) >>> sys.getdefaultencoding() ‘utf-8‘ >>> str.encode(‘other_coding‘)
在python中,直接将某种编码的str进行encode成另一种编码str
#str_A为utf-8 str_A.encode(‘gbk‘) 执行的操作是 str_A.decode(‘sys_codec‘).encode(‘gbk‘) 这里sys_codec即为上一步 sys.getdefaultencoding() 的编码
‘获得和设置系统默认编码‘和这里的str.encode是相关的,但我一般很少这么用,主要是觉得复杂不可控,还是输入明确decode,输出明确encode来得简单些
chardet
文件编码检测,下载
>>> import chardet >>> f = open(‘test.txt‘,‘r‘) >>> result = chardet.detect(f.read()) >>> result {‘confidence‘: 0.99, ‘encoding‘: ‘utf-8‘}
\u字符串转对应unicode字符串
>>> u‘中‘ u‘\u4e2d‘ >>> s = ‘\u4e2d‘ >>> print s.decode(‘unicode_escape‘) 中 >>> a = ‘\\u4fee\\u6539\\u8282\\u70b9\\u72b6\\u6001\\u6210\\u529f‘ >>> a.decode(‘unicode_escape‘) u‘\u4fee\u6539\u8282\u70b9\u72b6\u6001\u6210\u529f‘
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Unterschiede und Nutzungsanalyse zwischen str und Unicode bei der Python-Codierungsverarbeitung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Fastapi ...

Verständnis der Anti-Crawling-Strategie von Investing.com Viele Menschen versuchen oft, Nachrichten von Investing.com (https://cn.investing.com/news/latest-news) zu kriechen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...
