


Python solves the problem of Chinese character encoding: Unicode Decode Error_python
Preface
Recently, due to project needs, I need to read a txt document containing Chinese, and then save the file. The document was previously encoded by base64, causing all Chinese characters to be read and displayed as garbled characters. After the project team abandoned base64, two errors occurred successively:
ascii codec can't encode characters in position ordinal not in range 128 UnicodeDecodeError: ‘utf8' codec can't decode byte 0x。
If you don’t know about ascii, unicode and utf-8, you can read This previous article is about strings and encoding
Then you must understand the following three concepts:
ascii can only represent Numbers, English letters and some special symbols cannot represent Chinese characters
Both unicode and utf-8 can represent Chinese characters. Unicode is a fixed length and utf-8 is a variable length
The memory storage method is generally unicode, while the disk file storage method is generally utf-8, because utf-8 can save storage space
So what is python's default encoding?
>>> import sys >>> sys.getdefaultencoding() 'ascii' >>> reload(sys) <module 'sys' (built-in)> >>> sys.setdefaultencoding('utf-8') >>> sys.getdefaultencoding() 'utf-8'
The default encoding of python is ascii, which can be set by the sys.setdefaultencoding('utf-8')
function the default encoding.
In python, you can change the encoding of data through encode and decode, for example:
>>> u'汉字' u'\u6c49\u5b57' >>> u'汉字'.encode('utf-8') '\xe6\xb1\x89\xe5\xad\x97' >>> u'汉字'.encode('utf-8').decode('utf-8') u'\u6c49\u5b57'
We can set the encoding through these two functions .
So, what type is str in python?
>>> import binascii >>> '汉字' '\xba\xba\xd7\xd6' >>> type('汉字') <type 'str'> >>> print binascii.b2a_hex('汉字') babad7d6 >>> print binascii.b2a_hex(u'汉字') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) >>> print binascii.b2a_hex(u'汉字'.encode('utf-8')) e6b189e5ad97 >>> print binascii.b2a_hex(u'汉字'.encode('gbk')) babad7d6
binascii converts the binary of data into ascii. The above explanation is: the type of 'Chinese characters' is str, and the binary is babad7d6, u 'Chinese characters' cannot be converted into ascii, so the first error at the beginning is reported. The solution is to .encode('utf-8') it into str type. Because my command line uses the default GBK encoding of Windows, when all u'Chinese characters'.encode('gbk')
is used, the output results are the same as the 'Chinese character' results.
To summarize, python's str is actually a type of unicode. The default encoding of python is ascii. When converting non-ascii to ascii, an error will be reported. Keep the following rules in mind:
unicode => encode('suitable encoding') => str
- ##str => decode('suitable encoding') => unicode
import sys reloads(sys) sys.setdefaultencoding('utf-8')
For the second problem, there is an error when reading the file. UTF-8 files have two modes: BOM and no BOM. The difference between the two seems to be that the BOM file has one more header than the BOM-less file, causing an error when reading the file in UTF-8 mode. When I tried to read the file before, First, judge whether there is a BOM and skip the header of the BOM file. Then it failed. It was really embarrassing~~. You have to go to Google for help. The specific operation method is to use the codecs library to read the file (I guess this library is to detect the header of the file).
import codecs codecs.open(file_name, "r",encoding='utf-8', errors='ignore')

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Python is suitable for data science, web development and automation tasks, while C is suitable for system programming, game development and embedded systems. Python is known for its simplicity and powerful ecosystem, while C is known for its high performance and underlying control capabilities.

You can learn the basics of Python within two hours. 1. Learn variables and data types, 2. Master control structures such as if statements and loops, 3. Understand the definition and use of functions. These will help you start writing simple Python programs.

Python excels in gaming and GUI development. 1) Game development uses Pygame, providing drawing, audio and other functions, which are suitable for creating 2D games. 2) GUI development can choose Tkinter or PyQt. Tkinter is simple and easy to use, PyQt has rich functions and is suitable for professional development.

You can learn basic programming concepts and skills of Python within 2 hours. 1. Learn variables and data types, 2. Master control flow (conditional statements and loops), 3. Understand the definition and use of functions, 4. Quickly get started with Python programming through simple examples and code snippets.

Python is widely used in the fields of web development, data science, machine learning, automation and scripting. 1) In web development, Django and Flask frameworks simplify the development process. 2) In the fields of data science and machine learning, NumPy, Pandas, Scikit-learn and TensorFlow libraries provide strong support. 3) In terms of automation and scripting, Python is suitable for tasks such as automated testing and system management.

Python is easier to learn and use, while C is more powerful but complex. 1. Python syntax is concise and suitable for beginners. Dynamic typing and automatic memory management make it easy to use, but may cause runtime errors. 2.C provides low-level control and advanced features, suitable for high-performance applications, but has a high learning threshold and requires manual memory and type safety management.

To maximize the efficiency of learning Python in a limited time, you can use Python's datetime, time, and schedule modules. 1. The datetime module is used to record and plan learning time. 2. The time module helps to set study and rest time. 3. The schedule module automatically arranges weekly learning tasks.

Python excels in automation, scripting, and task management. 1) Automation: File backup is realized through standard libraries such as os and shutil. 2) Script writing: Use the psutil library to monitor system resources. 3) Task management: Use the schedule library to schedule tasks. Python's ease of use and rich library support makes it the preferred tool in these areas.
