Hướng dẫn what is unicode encoding in python? - mã hóa unicode trong python là gì?

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu về phương thức Python String Encode () với sự trợ giúp của các ví dụ.

Show

Phương thức

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

0 trả về một phiên bản được mã hóa của chuỗi đã cho.

Thí dụ

title = 'Python Programming'

# change encoding to utf-8 print(title.encode())

# Output: b'Python Programming'


Cú pháp của chuỗi mã hóa ()

Cú pháp của phương pháp

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

0 là:

string.encode(encoding='UTF-8',errors='strict')

Chuỗi mã hóa () tham số

Theo mặc định, phương thức

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

0 không yêu cầu bất kỳ tham số nào.

Nó trả về một phiên bản được mã hóa UTF-8 của chuỗi. Trong trường hợp thất bại, nó làm tăng ngoại lệ

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

3.

Tuy nhiên, phải mất hai tham số:

  • Mã hóa - chuỗi loại mã hóa phải được mã hóa thành - the encoding type a string has to be encoded to
  • Lỗi - Phản hồi khi mã hóa không thành công. Có sáu loại phản ứng lỗi - response when encoding fails. There are six types of error response
    • nghiêm ngặt - phản hồi mặc định làm tăng ngoại lệ unicodedecodeerror về thất bại
    • Bỏ qua - bỏ qua Unicode không thể kiểm soát được từ kết quả
    • Thay thế - Thay thế Unicode không thể kiểm soát thành dấu hỏi??
    • xmlcharrefreplace - chèn tham chiếu ký tự XML thay vì unicode không thể kiểm soát được
    • Backslashreplace - Chèn trình tự thoát \ unnnn thay vì unicode không thể kiểm soát được
    • NamePlace - Chèn A \ n {...} Trình tự thoát hiểm thay vì Unicode không thể kiểm soát được

Ví dụ 1: Mã hóa cho mã hóa UTF-8 mặc định

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)

Đầu ra

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'

Ví dụ 2: Mã hóa với tham số lỗi

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

Đầu ra

The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
Try different encoding and error parameters as well.


Ví dụ 2: Mã hóa với tham số lỗi

Lưu ý: Hãy thử các tham số mã hóa và lỗi khác nhau.

Mã hóa chuỗiencoding.

Vì Python 3.0, các chuỗi được lưu trữ dưới dạng unicode, tức là mỗi ký tự trong chuỗi được biểu thị bằng một điểm mã. Vì vậy, mỗi chuỗi chỉ là một chuỗi các điểm mã Unicode.utf-8, ascii, etc.

Để lưu trữ hiệu quả các chuỗi này, chuỗi các điểm mã được chuyển đổi thành một tập hợp các byte. Quá trình được gọi là mã hóa.utf-8 encoding.

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Unicode in Python: Làm việc với mã hóa ký tự This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Unicode in Python: Working With Character Encodings

Mã hóa và unicode là gì?

Tiêu chuẩn mã hóa ký tự Unicode là sơ đồ mã hóa ký tự có độ dài cố định bao gồm các ký tự từ hầu hết các ngôn ngữ sống trên thế giới. Thông tin về Unicode có thể được tìm thấy trong tiêu chuẩn Unicode và từ trang web Unicode Consortium tại www.unicode.org.

Unicode và ASCII trong Python là gì?

  • Unicode là mã hóa ký tự phổ quát được sử dụng để xử lý, lưu trữ và tạo điều kiện trao đổi dữ liệu văn bản bằng bất kỳ ngôn ngữ nào trong khi ASCII được sử dụng để biểu diễn văn bản như ký hiệu, chữ cái, chữ số, v.v. trong máy tính. ASCII: Đây là một tiêu chuẩn mã hóa ký tự cho giao tiếp điện tử.
  • Sự khác biệt giữa UTF và Unicode là gì?
  • Sự khác biệt giữa Unicode và UTF-8 Unicode là một bộ ký tự. UTF-8 đang mã hóa. Unicode là danh sách các ký tự có số thập phân duy nhất (điểm mã).
  • Mã hóa có nghĩa là gì trong Python?

Vì Python 3.0, các chuỗi được lưu trữ dưới dạng unicode, tức là mỗi ký tự trong chuỗi được biểu thị bằng một điểm mã. Vì vậy, mỗi chuỗi chỉ là một chuỗi các điểm mã Unicode. Để lưu trữ hiệu quả các chuỗi này, chuỗi các điểm mã được chuyển đổi thành một tập hợp các byte. Quá trình được gọi là mã hóa.

Xử lý mã hóa ký tự trong Python hoặc bất kỳ ngôn ngữ nào khác có thể có vẻ đau đớn. Những nơi như Stack Overflow có hàng ngàn câu hỏi xuất phát từ sự nhầm lẫn về các ngoại lệ như # unicode string string = 'pythön!' # print string print('The string is:', string) # ignore error print('The encoded version (with ignore) is:', string.encode("ascii", "ignore")) # replace error print('The encoded version (with replace) is:', string.encode("ascii", "replace"))3 và # unicode string string = 'pythön!' # print string print('The string is:', string) # ignore error print('The encoded version (with ignore) is:', string.encode("ascii", "ignore")) # replace error print('The encoded version (with replace) is:', string.encode("ascii", "replace"))6. Hướng dẫn này được thiết kế để xóa sương mù # unicode string string = 'pythön!' # print string print('The string is:', string) # ignore error print('The encoded version (with ignore) is:', string.encode("ascii", "ignore")) # replace error print('The encoded version (with replace) is:', string.encode("ascii", "replace"))7 và minh họa rằng làm việc với dữ liệu văn bản và nhị phân trong Python 3 có thể là một trải nghiệm suôn sẻ. Hỗ trợ của Python sườn Unicode rất mạnh mẽ và mạnh mẽ, nhưng phải mất một thời gian để làm chủ.

Hướng dẫn này là khác nhau bởi vì nó không phải là ngôn ngữ-bất khả tri mà thay vào đó là cố tình trung tâm. Bạn vẫn sẽ nhận được một đoạn mồi không liên tục ngôn ngữ, nhưng sau đó bạn sẽ đi sâu vào các hình minh họa trong Python, với các đoạn văn nặng về văn bản được giữ ở mức tối thiểu. Bạn có thể thấy cách sử dụng các khái niệm mã hóa ký tự trong mã Python trực tiếp.

Cho dù bạn tự học hay có nền tảng khoa học máy tính chính thức, rất có thể bạn đã thấy một bảng ASCII một hoặc hai lần. ASCII là một nơi tốt để bắt đầu tìm hiểu về mã hóa ký tự vì nó là một mã hóa nhỏ và có chứa. (Quá nhỏ, hóa ra.)

Nó bao gồm những điều sau đây:

  • Chữ cái chữ thường chữ cái: a đến z: a through z
  • Chữ hoa chữ hoa: a đến z: A through Z
  • Một số dấu câu và biểu tượng:
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    1 và
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    2, để đặt tên cho một cặp vợ chồng
    :
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    1 and
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    2, to name a couple
  • Các ký tự khoảng trắng: Một không gian thực tế (
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    3), cũng như một dòng mới, trả về vận chuyển, tab ngang, tab dọc và một vài cái khác
    : an actual space (
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    3), as well as a newline, carriage return, horizontal tab, vertical tab, and a few others
  • Một số ký tự không thể in: các ký tự như Backspace,
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    4, có thể được in theo nghĩa đen theo cách mà chữ A có thể
    : characters such as backspace,
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    4, that can’t be printed literally in the way that the letter A can

Vậy một định nghĩa chính thức hơn về mã hóa ký tự là gì?

Ở cấp độ rất cao, nó có một cách dịch các ký tự (như chữ cái, dấu câu, ký hiệu, khoảng trắng và ký tự điều khiển) sang số nguyên và cuối cùng là các bit. Mỗi ký tự có thể được mã hóa thành một chuỗi các bit duy nhất. Đừng lo lắng nếu bạn run rẩy về khái niệm bit, bởi vì chúng tôi sẽ sớm nhận được chúng.

Các loại khác nhau được phác thảo đại diện cho các nhóm ký tự. Mỗi ký tự duy nhất có một điểm mã tương ứng, mà bạn có thể nghĩ là chỉ là một số nguyên. Các ký tự được phân đoạn thành các phạm vi khác nhau trong bảng ASCII:code point, which you can think of as just an integer. Characters are segmented into different ranges within the ASCII table:

Phạm vi điểm mãLớp
0 đến 31Ký tự điều khiển/không in
32 đến 64Dấu câu, biểu tượng, số và không gian
65 đến 90Chữ cái chữ cái chữ hoa
91 đến 96Các biểu đồ bổ sung, chẳng hạn như
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
5 và
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
6
97 đến 122Chữ cái chữ cái chữ thường chữ cái
123 đến 126Các biểu đồ bổ sung, chẳng hạn như
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
7 và
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
8
127 Kiểm soát/ký tự không thể in (
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
9)

Toàn bộ bảng ASCII chứa 128 ký tự. Bảng này ghi lại bộ ký tự hoàn chỉnh mà ASCII cho phép. Nếu bạn không thấy một nhân vật ở đây, thì bạn chỉ cần thể hiện nó dưới dạng văn bản in theo sơ đồ mã hóa ASCII.character set that ASCII permits. If you don’t see a character here, then you simply can’t express it as printed text under the ASCII encoding scheme.

Điểm mãTên nhân vật)Điểm mãTên nhân vật)
0 Nul (null)64
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
0
1 Soh (bắt đầu tiêu đề)65
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
1
2 STX (bắt đầu văn bản)66
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
2
3 ETX (kết thúc văn bản)67
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
3
4 EOT (kết thúc truyền tải)68
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
4
5 ENQ (Yêu cầu)69
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
5
6 ACK (xác nhận)70
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
6
7 Bel (Bell)71
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
7
8 BS (Backspace)72
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
8
9 HT (tab ngang)73
# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace
9
10 LF (nguồn cấp dữ liệu)74
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
0
11 VT (tab dọc)75
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
1
12 FF (nguồn cấp dữ liệu mẫu)76
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
2
13 Cr (Quay trở lại)77
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
3
14 Vì vậy (dịch chuyển ra)78
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
4
15 Si (Shift In)79
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
5
16 DLE (Escape liên kết dữ liệu)80
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
6
17 DC1 (Điều khiển thiết bị 1)81
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
7
18 DC2 (Điều khiển thiết bị 2)82
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
8
19 DC3 (Điều khiển thiết bị 3)83
>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'
9
20 DC4 (Điều khiển thiết bị 4)84
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
0
21 NAK (xác nhận tiêu cực)85
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
1
22 Syn (nhàn rỗi đồng bộ)86
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
2
23 ETB (Kết thúc khối truyền)87
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
3
24 Có thể (hủy)88
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
4
25 Em (kết thúc trung bình)89
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
5
26 Phụ (thay thế)90
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
6
27 ESC (Escape)91
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
5
28 FS (Bộ phân cách tệp)92
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
6
29 GS (phân tách nhóm)93
>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'
9
30 RS (Bộ phân cách ghi)94
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
0
31 Hoa Kỳ (phân tách đơn vị)95
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
1
32 SP (không gian)96
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
2
33
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
3
97
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
4
34
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
5
98
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
6
35
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
7
99
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
8
36
def n_possible_values(nbits: int) -> int:
    return 2 ** nbits
9
100
string.encode(encoding='UTF-8',errors='strict')
00
37
string.encode(encoding='UTF-8',errors='strict')
01
101
string.encode(encoding='UTF-8',errors='strict')
02
38
string.encode(encoding='UTF-8',errors='strict')
03
102
string.encode(encoding='UTF-8',errors='strict')
04
39
string.encode(encoding='UTF-8',errors='strict')
05
103
string.encode(encoding='UTF-8',errors='strict')
06
40
string.encode(encoding='UTF-8',errors='strict')
07
104
string.encode(encoding='UTF-8',errors='strict')
08
41
string.encode(encoding='UTF-8',errors='strict')
09
105
string.encode(encoding='UTF-8',errors='strict')
10
42
string.encode(encoding='UTF-8',errors='strict')
11
106
string.encode(encoding='UTF-8',errors='strict')
12
43
string.encode(encoding='UTF-8',errors='strict')
13
107
string.encode(encoding='UTF-8',errors='strict')
14
44
string.encode(encoding='UTF-8',errors='strict')
15
108
string.encode(encoding='UTF-8',errors='strict')
16
45
string.encode(encoding='UTF-8',errors='strict')
17
109
string.encode(encoding='UTF-8',errors='strict')
18
46
string.encode(encoding='UTF-8',errors='strict')
19
110
string.encode(encoding='UTF-8',errors='strict')
20
47
string.encode(encoding='UTF-8',errors='strict')
21
111
string.encode(encoding='UTF-8',errors='strict')
22
48
string.encode(encoding='UTF-8',errors='strict')
23
112
string.encode(encoding='UTF-8',errors='strict')
24
49
string.encode(encoding='UTF-8',errors='strict')
25
113
string.encode(encoding='UTF-8',errors='strict')
26
50
string.encode(encoding='UTF-8',errors='strict')
27
114
string.encode(encoding='UTF-8',errors='strict')
28
51
string.encode(encoding='UTF-8',errors='strict')
29
115
string.encode(encoding='UTF-8',errors='strict')
30
52
string.encode(encoding='UTF-8',errors='strict')
31
116
string.encode(encoding='UTF-8',errors='strict')
32
53
string.encode(encoding='UTF-8',errors='strict')
33
117
string.encode(encoding='UTF-8',errors='strict')
34
54
string.encode(encoding='UTF-8',errors='strict')
35
118
string.encode(encoding='UTF-8',errors='strict')
36
55
string.encode(encoding='UTF-8',errors='strict')
37
119
string.encode(encoding='UTF-8',errors='strict')
38
56
string.encode(encoding='UTF-8',errors='strict')
39
120
string.encode(encoding='UTF-8',errors='strict')
40
57
string.encode(encoding='UTF-8',errors='strict')
41
121
string.encode(encoding='UTF-8',errors='strict')
42
58
string.encode(encoding='UTF-8',errors='strict')
43
122
string.encode(encoding='UTF-8',errors='strict')
44
59
string.encode(encoding='UTF-8',errors='strict')
45
123
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
7
60
string.encode(encoding='UTF-8',errors='strict')
47
124
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
8
61
string.encode(encoding='UTF-8',errors='strict')
49
125
string.encode(encoding='UTF-8',errors='strict')
50
62
string.encode(encoding='UTF-8',errors='strict')
51
126
string.encode(encoding='UTF-8',errors='strict')
52
63
string.encode(encoding='UTF-8',errors='strict')
53
127 Del (xóa)

Mô -đun string.encode(encoding='UTF-8',errors='strict')54

Mô-đun Python sườn

string.encode(encoding='UTF-8',errors='strict')
54 là một cửa hàng thuận tiện cho các hằng số chuỗi rơi vào bộ ký tự ASCII.

Ở đây, cốt lõi của mô -đun trong tất cả vinh quang của nó:

# From lib/python3.7/string.py

whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = r"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace

Hầu hết các hằng số này nên tự ghi chép trong tên định danh của chúng. Chúng tôi sẽ bao gồm những gì

string.encode(encoding='UTF-8',errors='strict')
56 và
string.encode(encoding='UTF-8',errors='strict')
57 trong thời gian ngắn.

Bạn có thể sử dụng các hằng số này để thao tác chuỗi hàng ngày:

>>>

>>> import string

>>> s = "What's wrong with ASCII?!?!?"
>>> s.rstrip(string.punctuation)
'What's wrong with ASCII'

Một chút bồi dưỡng

Bây giờ là thời điểm tốt cho việc bồi dưỡng ngắn về bit, đơn vị thông tin cơ bản nhất mà máy tính biết.bit, the most fundamental unit of information that a computer knows.

Một chút là một tín hiệu chỉ có hai trạng thái có thể. Có nhiều cách khác nhau để thể hiện một chút một chút mà tất cả đều có nghĩa là cùng một điều:

  • 0 hoặc 1
  • "có hay không"
  • string.encode(encoding='UTF-8',errors='strict')
    58 hoặc
    string.encode(encoding='UTF-8',errors='strict')
    59
  • "bật hoặc tắt"

Bảng ASCII của chúng tôi từ phần trước sử dụng những gì bạn và tôi sẽ gọi các số (0 đến 127), nhưng những gì được gọi chính xác hơn là các số trong cơ sở 10 (thập phân).

Bạn cũng có thể thể hiện từng số cơ sở này với một chuỗi bit (cơ sở 2). Dưới đây là các phiên bản nhị phân từ 0 đến 10 trong thập phân:

Số thập phânNhị phân (nhỏ gọn)Nhị phân (dạng đệm)
0 0 00000000
1 1 00000001
2 10 00000010
3 11 00000011
4 100 00000100
5 101 00000101
6 110 00000110
7 111 00000111
8 1000 00001000
9 1001 00001001
10 1010 00001010

Lưu ý rằng khi số thập phân N tăng, bạn cần các bit quan trọng hơn để thể hiện ký tự được thiết lập và bao gồm cả số đó.significant bits to represent the character set up to and including that number.

Ở đây, một cách tiện dụng để đại diện cho các chuỗi ASCII như các chuỗi bit trong Python. Mỗi ký tự từ chuỗi ASCII được mã hóa giả thành 8 bit, với khoảng trắng ở giữa các chuỗi 8 bit mà mỗi người đại diện cho một ký tự duy nhất:

>>>

>>> def make_bitseq(s: str) -> str:
...     if not s.isascii():
...         raise ValueError("ASCII only allowed")
...     return " ".join(f"{ord(i):08b}" for i in s)

>>> make_bitseq("bits")
'01100010 01101001 01110100 01110011'

>>> make_bitseq("CAPS")
'01000011 01000001 01010000 01010011'

>>> make_bitseq("$25.43")
'00100100 00110010 00110101 00101110 00110100 00110011'

>>> make_bitseq("~5")
'01111110 00110101'

String fling

string.encode(encoding='UTF-8',errors='strict')
60 sử dụng đặc tả định dạng Python, ngôn ngữ nhỏ, đây là cách chỉ định định dạng cho các trường thay thế trong các chuỗi định dạng:

  • Phía bên trái của đại tràng,

    string.encode(encoding='UTF-8',errors='strict')
    61, là đối tượng thực tế có giá trị sẽ được định dạng và chèn vào đầu ra. Sử dụng chức năng Python
    string.encode(encoding='UTF-8',errors='strict')
    62 cung cấp cho bạn điểm mã cơ sở-10 cho một ký tự
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8.

  • Phía bên phải của đại tràng là bộ xác định định dạng.

    string.encode(encoding='UTF-8',errors='strict')
    64 có nghĩa là chiều rộng 8, 0 được đệm và
    def n_possible_values(nbits: int) -> int:
        return 2 ** nbits
    
    6 hoạt động như một dấu hiệu để xuất số kết quả trong cơ sở 2 (nhị phân).

Thủ thuật này chủ yếu chỉ là để giải trí, và nó sẽ thất bại rất tệ đối với bất kỳ nhân vật nào mà bạn không thấy hiện tại trong bảng ASCII. Chúng tôi sẽ thảo luận về cách các mã hóa khác khắc phục vấn đề này sau này.

Chúng tôi cần nhiều bit hơn!

Có một công thức cực kỳ quan trọng mà liên quan đến định nghĩa của một chút. Đưa ra một số bit, n, số lượng các giá trị khác biệt có thể được biểu diễn trong n bit là 2N:

def n_possible_values(nbits: int) -> int:
    return 2 ** nbits

Ở đây, điều đó có nghĩa là gì:

  • 1 bit sẽ cho phép bạn thể hiện 21 == 2 giá trị có thể.
  • 8 bit sẽ cho phép bạn thể hiện 28 == 256 giá trị có thể.
  • 64 bit sẽ cho phép bạn thể hiện 264 == 18,446,744,073,709.551.616 giá trị có thể.

Có một hệ quả cho công thức này: đưa ra một loạt các giá trị khác biệt có thể, làm thế nào chúng ta có thể tìm thấy số lượng bit, n, được yêu cầu cho phạm vi được thể hiện đầy đủ? Những gì bạn đang cố gắng giải quyết là n trong phương trình 2n = x (nơi bạn đã biết x).

Ở đây, những gì làm việc để làm việc:

>>>

string.encode(encoding='UTF-8',errors='strict')
0

Lý do mà bạn cần sử dụng trần trong

string.encode(encoding='UTF-8',errors='strict')
66 là để giải thích các giá trị không phải là sức mạnh sạch của 2. Giả sử bạn cần lưu trữ tổng số ký tự gồm 110 ký tự. Ngây thơ, điều này sẽ mất
string.encode(encoding='UTF-8',errors='strict')
67 bit, nhưng ở đó, không có thứ gọi là 0,781 bit. 110 giá trị sẽ yêu cầu 7 bit, không phải 6, với các khe cuối cùng không cần thiết:

>>>

string.encode(encoding='UTF-8',errors='strict')
1

Tất cả điều này phục vụ để chứng minh một khái niệm: ASCII, nói đúng, một mã 7 bit. Bảng ASCII mà bạn đã thấy ở trên chứa 128 điểm và ký tự mã, bao gồm từ 0 đến 127. Điều này đòi hỏi 7 bit:

>>>

string.encode(encoding='UTF-8',errors='strict')
2

Vấn đề với điều này là các máy tính hiện đại don don lưu trữ nhiều thứ trong các khe 7 bit. Họ lưu lượng truy cập theo đơn vị 8 bit, được gọi là một byte.byte.

Điều này có nghĩa là không gian lưu trữ được ASCII sử dụng là nửa trống. Nếu nó không rõ lý do tại sao điều này, hãy nghĩ lại bảng thập phân đến nhị phân từ trên cao. Bạn có thể diễn đạt số 0 và 1 chỉ với 1 bit hoặc bạn có thể sử dụng 8 bit để diễn đạt chúng lần lượt là 00000000 và 00000001.

Bạn có thể biểu thị các số từ 0 đến 3 chỉ với 2 bit hoặc 00 đến 11 hoặc bạn có thể sử dụng 8 bit để diễn đạt chúng dưới dạng 00000000, 00000001, 00000010 và 00000011, tương ứng. Điểm mã ASCII cao nhất, 127, chỉ yêu cầu 7 bit đáng kể.

Biết được điều này, bạn có thể thấy rằng

string.encode(encoding='UTF-8',errors='strict')
68 chuyển đổi chuỗi ASCII thành đại diện
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 của byte, trong đó mọi nhân vật tiêu thụ một byte:

>>>

string.encode(encoding='UTF-8',errors='strict')
3

ASCII, việc sử dụng không đúng cách các byte 8 bit được cung cấp bởi các máy tính hiện đại đã dẫn đến một gia đình mã hóa không chính thức, mâu thuẫn mà mỗi ký tự bổ sung được chỉ định sẽ được sử dụng với 128 điểm mã có sẵn còn lại được phép trong sơ đồ mã hóa ký tự 8 bit.

Không chỉ các mã hóa khác nhau này đụng độ với nhau, mà mỗi người trong số chúng vẫn là một đại diện không hoàn chỉnh của các nhân vật thế giới, bất kể thực tế là họ đã sử dụng thêm một bit.

Trong những năm qua, một nhân vật mã hóa Mega-Scheme đã đến để cai trị tất cả. Tuy nhiên, trước khi chúng tôi đến đó, hãy để nói chuyện trong một phút về các hệ thống đánh số, đây là một nền tảng cơ bản của các sơ đồ mã hóa ký tự.

Bao gồm tất cả các cơ sở: các hệ thống số khác

Trong cuộc thảo luận về ASCII ở trên, bạn đã thấy rằng mỗi ký tự ánh xạ tới một số nguyên trong phạm vi từ 0 đến 127.

Phạm vi số này được thể hiện trong thập phân (cơ sở 10). Đó là cách mà bạn, tôi và những người còn lại của chúng ta đã quen với việc đếm, không có lý do phức tạp hơn chúng ta có 10 ngón tay.

Nhưng có những hệ thống đánh số khác cũng đặc biệt phổ biến trong suốt mã nguồn CPython. Mặc dù số cơ bản của người Viking là giống nhau, nhưng tất cả các hệ thống đánh số chỉ là những cách khác nhau để thể hiện cùng một số.

Nếu tôi hỏi bạn số nào chuỗi

string.encode(encoding='UTF-8',errors='strict')
70 đại diện cho, bạn sẽ đúng khi cho tôi một cái nhìn kỳ lạ trước khi trả lời rằng nó đại diện cho mười một.

Tuy nhiên, biểu diễn chuỗi này có thể diễn đạt các số cơ bản khác nhau trong các hệ thống đánh số khác nhau. Ngoài thập phân, các lựa chọn thay thế bao gồm các hệ thống đánh số phổ biến sau:

  • Nhị phân: cơ sở 2: base 2
  • Octal: Cơ sở 8: base 8
  • Hexadecimal (Hex): Cơ sở 16: base 16

Nhưng chúng ta nói rằng, trong một hệ thống đánh số nhất định, các con số được thể hiện trong cơ sở n?

Đây là cách tốt nhất mà tôi biết để nói rõ điều này có nghĩa là gì: đó là số lượng ngón tay mà bạn đã tính đến trong hệ thống đó.

Nếu bạn muốn có một giới thiệu đầy đủ hơn nhưng vẫn nhẹ nhàng về các hệ thống đánh số, mã Charles Petzold, là một cuốn sách cực kỳ tuyệt vời khám phá các nền tảng của mã máy tính một cách chi tiết.

Một cách để chứng minh cách các hệ thống đánh số khác nhau diễn giải cùng một điều với hàm tạo Python, ____171. Nếu bạn chuyển

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 sang
string.encode(encoding='UTF-8',errors='strict')
71, Python sẽ giả định theo mặc định rằng chuỗi thể hiện một số trong cơ sở 10 trừ khi bạn nói với nó khác:

>>>

string.encode(encoding='UTF-8',errors='strict')
4

Có một cách phổ biến hơn để nói với Python rằng số nguyên của bạn được gõ vào một cơ sở khác 10. Python chấp nhận các dạng theo nghĩa đen của mỗi trong số 3 hệ thống đánh số thay thế ở trên:literal forms of each of the 3 alternative numbering systems above:

Loại nghĩa đenTiếp đầu ngữThí dụ
n/an/a
string.encode(encoding='UTF-8',errors='strict')
74
Nhị phân nhị phân
string.encode(encoding='UTF-8',errors='strict')
75 hoặc
string.encode(encoding='UTF-8',errors='strict')
76
string.encode(encoding='UTF-8',errors='strict')
77
Nghĩa đen của bát phân
string.encode(encoding='UTF-8',errors='strict')
78 hoặc
string.encode(encoding='UTF-8',errors='strict')
79
string.encode(encoding='UTF-8',errors='strict')
80
Hex theo nghĩa đen
string.encode(encoding='UTF-8',errors='strict')
81 hoặc
string.encode(encoding='UTF-8',errors='strict')
82
string.encode(encoding='UTF-8',errors='strict')
83

Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến

string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:integer literals. You can see that these produce the same results, respectively, as the calls to
string.encode(encoding='UTF-8',errors='strict')
71 with non-default
string.encode(encoding='UTF-8',errors='strict')
85 values. They’re all just
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 to Python:

>>>

string.encode(encoding='UTF-8',errors='strict')
5

Có một cách phổ biến hơn để nói với Python rằng số nguyên của bạn được gõ vào một cơ sở khác 10. Python chấp nhận các dạng theo nghĩa đen của mỗi trong số 3 hệ thống đánh số thay thế ở trên:

Loại nghĩa đenTiếp đầu ngữThí dụn/a
string.encode(encoding='UTF-8',errors='strict')
74
Nhị phân nhị phân
string.encode(encoding='UTF-8',errors='strict')
75 hoặc
string.encode(encoding='UTF-8',errors='strict')
76
string.encode(encoding='UTF-8',errors='strict')
77
Nghĩa đen của bát phân
string.encode(encoding='UTF-8',errors='strict')
78 hoặc
string.encode(encoding='UTF-8',errors='strict')
79
string.encode(encoding='UTF-8',errors='strict')
80
Hex theo nghĩa đen
string.encode(encoding='UTF-8',errors='strict')
81 hoặc
string.encode(encoding='UTF-8',errors='strict')
82
string.encode(encoding='UTF-8',errors='strict')
83
Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến
string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:
Ở đây, cách bạn có thể nhập các loại tương đương nhị phân, bát phân và thập lục phân của các số thập phân từ 0 đến 20. Bất kỳ loại nào hoàn toàn có giá trị trong shell thông dịch viên Python hoặc mã nguồn và tất cả đều hoạt động để loại
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0:
Số thập phân
string.encode(encoding='UTF-8',errors='strict')
77
Nghĩa đen của bát phân
string.encode(encoding='UTF-8',errors='strict')
78 hoặc
string.encode(encoding='UTF-8',errors='strict')
79
string.encode(encoding='UTF-8',errors='strict')
80
Hex theo nghĩa đen
string.encode(encoding='UTF-8',errors='strict')
81 hoặc
string.encode(encoding='UTF-8',errors='strict')
82
string.encode(encoding='UTF-8',errors='strict')
83
Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến
string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:
Ở đây, cách bạn có thể nhập các loại tương đương nhị phân, bát phân và thập lục phân của các số thập phân từ 0 đến 20. Bất kỳ loại nào hoàn toàn có giá trị trong shell thông dịch viên Python hoặc mã nguồn và tất cả đều hoạt động để loại
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0:
Số thập phânNhị phân
Bát phânHex
string.encode(encoding='UTF-8',errors='strict')
23
string.encode(encoding='UTF-8',errors='strict')
89
string.encode(encoding='UTF-8',errors='strict')
90
string.encode(encoding='UTF-8',errors='strict')
91
string.encode(encoding='UTF-8',errors='strict')
25
string.encode(encoding='UTF-8',errors='strict')
93
string.encode(encoding='UTF-8',errors='strict')
94
string.encode(encoding='UTF-8',errors='strict')
95
string.encode(encoding='UTF-8',errors='strict')
27
string.encode(encoding='UTF-8',errors='strict')
97
string.encode(encoding='UTF-8',errors='strict')
98
string.encode(encoding='UTF-8',errors='strict')
99
string.encode(encoding='UTF-8',errors='strict')
80
Hex theo nghĩa đen
string.encode(encoding='UTF-8',errors='strict')
81 hoặc
string.encode(encoding='UTF-8',errors='strict')
82
string.encode(encoding='UTF-8',errors='strict')
83
Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến
string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:
Ở đây, cách bạn có thể nhập các loại tương đương nhị phân, bát phân và thập lục phân của các số thập phân từ 0 đến 20. Bất kỳ loại nào hoàn toàn có giá trị trong shell thông dịch viên Python hoặc mã nguồn và tất cả đều hoạt động để loại
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0:
string.encode(encoding='UTF-8',errors='strict')
74
Nhị phân nhị phân
string.encode(encoding='UTF-8',errors='strict')
75 hoặc
string.encode(encoding='UTF-8',errors='strict')
76
string.encode(encoding='UTF-8',errors='strict')
77
Nghĩa đen của bát phân
string.encode(encoding='UTF-8',errors='strict')
78 hoặc
string.encode(encoding='UTF-8',errors='strict')
79
string.encode(encoding='UTF-8',errors='strict')
80
Hex theo nghĩa đen
string.encode(encoding='UTF-8',errors='strict')
81 hoặc
string.encode(encoding='UTF-8',errors='strict')
82
string.encode(encoding='UTF-8',errors='strict')
83
Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến
string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:
Ở đây, cách bạn có thể nhập các loại tương đương nhị phân, bát phân và thập lục phân của các số thập phân từ 0 đến 20. Bất kỳ loại nào hoàn toàn có giá trị trong shell thông dịch viên Python hoặc mã nguồn và tất cả đều hoạt động để loại
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0:
Số thập phânNhị phânBát phânHex
string.encode(encoding='UTF-8',errors='strict')
23
string.encode(encoding='UTF-8',errors='strict')
89
string.encode(encoding='UTF-8',errors='strict')
90
string.encode(encoding='UTF-8',errors='strict')
91
string.encode(encoding='UTF-8',errors='strict')
25
string.encode(encoding='UTF-8',errors='strict')
93
string.encode(encoding='UTF-8',errors='strict')
94
string.encode(encoding='UTF-8',errors='strict')
95
string.encode(encoding='UTF-8',errors='strict')
27
string.encode(encoding='UTF-8',errors='strict')
97
string.encode(encoding='UTF-8',errors='strict')
98
string.encode(encoding='UTF-8',errors='strict')
83
Tất cả đều là các dạng phụ của các chữ số nguyên. Bạn có thể thấy rằng chúng tạo ra các kết quả tương tự, tương ứng, khi các cuộc gọi đến
string.encode(encoding='UTF-8',errors='strict')
71 với các giá trị không mặc định
string.encode(encoding='UTF-8',errors='strict')
85. Tất cả họ chỉ là
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0 để Python:
Ở đây, cách bạn có thể nhập các loại tương đương nhị phân, bát phân và thập lục phân của các số thập phân từ 0 đến 20. Bất kỳ loại nào hoàn toàn có giá trị trong shell thông dịch viên Python hoặc mã nguồn và tất cả đều hoạt động để loại
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0:
Số thập phânNhị phân
Bát phânHex
string.encode(encoding='UTF-8',errors='strict')
23
string.encode(encoding='UTF-8',errors='strict')
89
string.encode(encoding='UTF-8',errors='strict')
90
string.encode(encoding='UTF-8',errors='strict')
91
string.encode(encoding='UTF-8',errors='strict')
25
string.encode(encoding='UTF-8',errors='strict')
93

string.encode(encoding='UTF-8',errors='strict')
94

string.encode(encoding='UTF-8',errors='strict')
6

string.encode(encoding='UTF-8',errors='strict')
95

string.encode(encoding='UTF-8',errors='strict')
27

Nhập Unicode

Như bạn đã thấy, vấn đề với ASCII là nó gần như không phải là một bộ nhân vật đủ lớn để phù hợp với bộ ngôn ngữ, phương ngữ, biểu tượng và glyphs của thế giới. (Nó thậm chí không đủ lớn cho một mình tiếng Anh.)

Unicode về cơ bản phục vụ mục đích tương tự như ASCII, nhưng nó chỉ bao gồm một cách, cách, cách tập hợp các điểm mã lớn hơn. Có một số ít các mã hóa xuất hiện theo trình tự thời gian giữa ASCII và Unicode, nhưng chúng không thực sự đáng được đề cập đến vì Unicode và một trong những sơ đồ mã hóa của nó, UTF-8, đã được sử dụng chủ yếu.

Hãy nghĩ về Unicode như một phiên bản lớn của bảng ASCII, một người có 1.114.112 điểm mã có thể. Đó là từ 0 đến 1.114.111, hoặc 0 đến 17 * (216) - 1 hoặc

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
77 Hexadecimal. Trong thực tế, ASCII là một tập hợp con hoàn hảo của Unicode. 128 ký tự đầu tiên trong bảng Unicode tương ứng chính xác với các ký tự ASCII mà bạn đã mong đợi một cách hợp lý.

Vì lợi ích của việc chính xác về mặt kỹ thuật, bản thân Unicode không phải là một mã hóa. Thay vào đó, Unicode được triển khai bởi các mã hóa ký tự khác nhau mà bạn sẽ thấy sớm. Unicode được coi là bản đồ tốt hơn (một cái gì đó như

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
78) hoặc bảng cơ sở dữ liệu 2 cột. Nó ánh xạ các ký tự (như
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
79,
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
80 hoặc thậm chí
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
81) thành các số nguyên dương, khác biệt. Một mã hóa nhân vật cần cung cấp thêm một chút.Unicode itself is not an encoding. Rather, Unicode is implemented by different character encodings, which you’ll see soon. Unicode is better thought of as a map (something like a
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
78) or a 2-column database table. It maps characters (like
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
79,
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
80, or even
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
81) to distinct, positive integers. A character encoding needs to offer a bit more.

Unicode chứa hầu như mọi nhân vật mà bạn có thể tưởng tượng, bao gồm cả những người không thể in bổ sung. Một trong những mục yêu thích của tôi là dấu hiệu từ phải sang trái, có mã điểm 8207 và được sử dụng trong văn bản với cả các tập lệnh ngôn ngữ từ trái sang phải và từ phải, chẳng hạn như một bài viết có chứa cả đoạn văn tiếng Anh và tiếng Ả Rập .

Unicode vs UTF-8

Nó đã không mất nhiều thời gian để mọi người nhận ra rằng tất cả các nhân vật trên thế giới không thể được đóng gói thành một byte. Nó rõ ràng từ đó rằng các mã hóa hiện đại, toàn diện hơn sẽ cần sử dụng nhiều byte để mã hóa một số ký tự.

Bạn cũng thấy ở trên rằng Unicode không phải là một mã hóa ký tự toàn diện. Tại sao vậy?

Có một điều mà Unicode không nói với bạn: Nó không cho bạn biết làm thế nào để có được các bit thực tế từ văn bản chỉ các điểm mã. Nó không cho bạn biết đủ về cách chuyển đổi văn bản thành dữ liệu nhị phân và ngược lại.

Unicode là một tiêu chuẩn mã hóa trừu tượng, không phải là mã hóa. Đó là nơi mà UTF-8 và các chương trình mã hóa khác xuất hiện. Tiêu chuẩn Unicode (Bản đồ các ký tự cho các điểm mã) xác định một số mã hóa khác nhau từ bộ ký tự đơn của nó.

UTF-8 cũng như anh em họ ít sử dụng hơn, UTF-16 và UTF-32, là các định dạng mã hóa để đại diện cho các ký tự Unicode dưới dạng dữ liệu nhị phân của một hoặc nhiều byte trên mỗi ký tự. Chúng tôi sẽ thảo luận về UTF-16 và UTF-32 trong một khoảnh khắc, nhưng UTF-8 đã chiếm phần chia sẻ lớn nhất của chiếc bánh.

Điều đó đưa chúng ta đến một định nghĩa đã quá hạn lâu. Nó có nghĩa là gì, chính thức, để mã hóa và giải mã?encode and decode?

Mã hóa và giải mã trong Python 3

Loại Python 3

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 có nghĩa là đại diện cho văn bản có thể đọc được của con người và có thể chứa bất kỳ ký tự Unicode nào.

Loại

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9, ngược lại, đại diện cho dữ liệu nhị phân hoặc chuỗi byte thô, bản chất không có mã hóa được gắn vào nó.

Mã hóa và giải mã là quá trình đi từ cái này sang cái khác:

Hướng dẫn what is unicode encoding in python? - mã hóa unicode trong python là gì?
Mã hóa so với giải mã (Hình ảnh: Python thật)

Trong

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
84 và
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
85, tham số
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
86 là
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
87 theo mặc định, mặc dù nó thường an toàn hơn và không rõ ràng hơn để chỉ định nó:

>>>

string.encode(encoding='UTF-8',errors='strict')
7

Kết quả của

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
88 là một đối tượng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9. Cả hai byte theo nghĩa đen (như
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
90) và các biểu diễn của byte chỉ cho phép các ký tự ASCII.

Đây là lý do tại sao, khi gọi

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
91, tương thích ASCII
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
92 được phép được thể hiện như hiện tại, nhưng N với Tilde được trốn thoát đến
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
93. Trình tự trông lộn xộn đó đại diện cho hai byte,
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
94 và
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
95 trong hex:

>>>

string.encode(encoding='UTF-8',errors='strict')
8

Kết quả của

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
88 là một đối tượng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9. Cả hai byte theo nghĩa đen (như
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
90) và các biểu diễn của byte chỉ cho phép các ký tự ASCII.

Đây là lý do tại sao, khi gọi # unicode string string = 'pythön!' # print string print('The string is:', string) # default encoding to utf-8 string_utf = string.encode() # print result print('The encoded version is:', string_utf)91, tương thích ASCII # unicode string string = 'pythön!' # print string print('The string is:', string) # default encoding to utf-8 string_utf = string.encode() # print result print('The encoded version is:', string_utf)92 được phép được thể hiện như hiện tại, nhưng N với Tilde được trốn thoát đến # unicode string string = 'pythön!' # print string print('The string is:', string) # default encoding to utf-8 string_utf = string.encode() # print result print('The encoded version is:', string_utf)93. Trình tự trông lộn xộn đó đại diện cho hai byte, # unicode string string = 'pythön!' # print string print('The string is:', string) # default encoding to utf-8 string_utf = string.encode() # print result print('The encoded version is:', string_utf)94 và # unicode string string = 'pythön!' # print string print('The string is:', string) # default encoding to utf-8 string_utf = string.encode() # print result print('The encoded version is:', string_utf)95 trong hex:

Đó là, ký tự

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
96 yêu cầu hai byte cho biểu diễn nhị phân của nó theo UTF-8.

  • Python 3: All-in on unicode

  • Python 3 là tất cả trên Unicode và UTF-8 cụ thể. Ở đây, điều đó có nghĩa là gì:

  • Mã nguồn Python 3 được coi là UTF-8 theo mặc định. Điều này có nghĩa là bạn không cần

    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # default encoding to utf-8
    

    string_utf = string.encode()

    # print result print('The encoded version is:', string_utf)
    97 ở đầu các tệp
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # default encoding to utf-8
    

    string_utf = string.encode()

    # print result print('The encoded version is:', string_utf)
    98 trong Python 3.

  • Mô -đun Python sườn

    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    04 mặc định là cờ
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    05 thay vì
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    06. Điều này có nghĩa là, ví dụ,
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    07 phù hợp với các ký tự từ Unicode, không chỉ các chữ cái ASCII.

  • Mặc định

    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # default encoding to utf-8
    

    string_utf = string.encode()

    # print result print('The encoded version is:', string_utf)
    86 trong
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # default encoding to utf-8
    

    string_utf = string.encode()

    # print result print('The encoded version is:', string_utf)
    88 và
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    10 là UTF-8.

Có một thuộc tính khác có nhiều sắc thái hơn, đó là mặc định

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
86 cho
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
12 tích hợp phụ thuộc vào nền tảng và phụ thuộc vào giá trị của
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
13:

>>>

string.encode(encoding='UTF-8',errors='strict')
9

Một lần nữa, bài học ở đây là cẩn thận về việc đưa ra các giả định khi nói đến tính phổ quát của UTF-8, ngay cả khi đó là mã hóa chiếm ưu thế. Không bao giờ đau khi được rõ ràng trong mã của bạn.

Một byte, hai byte, ba byte, bốn

Một tính năng quan trọng là UTF-8 là một mã hóa có độ dài thay đổi. Nó rất hấp dẫn để che giấu ý nghĩa của điều này, nhưng nó đáng để đi sâu vào.variable-length encoding. It’s tempting to gloss over what this means, but it’s worth delving into.

Nghĩ lại phần trên ASCII. Tất cả mọi thứ trong nhu cầu đất đai mở rộng nhiều nhất là một byte không gian. Bạn có thể nhanh chóng chứng minh điều này với biểu thức máy phát sau:

>>>

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
0

Một lần nữa, bài học ở đây là cẩn thận về việc đưa ra các giả định khi nói đến tính phổ quát của UTF-8, ngay cả khi đó là mã hóa chiếm ưu thế. Không bao giờ đau khi được rõ ràng trong mã của bạn.

>>>

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
1

Một lần nữa, bài học ở đây là cẩn thận về việc đưa ra các giả định khi nói đến tính phổ quát của UTF-8, ngay cả khi đó là mã hóa chiếm ưu thế. Không bao giờ đau khi được rõ ràng trong mã của bạn.

  • Một byte, hai byte, ba byte, bốn
  • Một tính năng quan trọng là UTF-8 là một mã hóa có độ dài thay đổi. Nó rất hấp dẫn để che giấu ý nghĩa của điều này, nhưng nó đáng để đi sâu vào.

Nghĩ lại phần trên ASCII. Tất cả mọi thứ trong nhu cầu đất đai mở rộng nhiều nhất là một byte không gian. Bạn có thể nhanh chóng chứng minh điều này với biểu thức máy phát sau:

UTF-8 khá khác nhau. Một ký tự unicode nhất định có thể chiếm bất cứ nơi nào từ một đến bốn byte. Ở đây, một ví dụ về một ký tự unicode duy nhất chiếm bốn byte:Đây là một tính năng tinh tế nhưng quan trọng của
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
14:
Độ dài của một ký tự unicode duy nhất là Python
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 sẽ luôn luôn là 1, bất kể nó chiếm bao nhiêu byte.
Độ dài của cùng một ký tự được mã hóa thành
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9 sẽ ở bất cứ đâu trong khoảng từ 1 đến 4.
Bảng dưới đây tóm tắt những loại ký tự chung nào phù hợp với mỗi nhóm có độ dài byte:Phạm vi thập phânPhạm vi hexNhững gì bao gồm
Ví dụ0 đến 127
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
17 đến
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
18
Hoa Kỳ ASCII
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
19,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
20,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
21,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
22
128 đến 2047
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
23 đến
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
24
Hầu hết các bảng chữ cái Latin*
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
25,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
26,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
27,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
28
2048 đến 65535
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
29 đến
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
30
Các bộ phận bổ sung của mặt phẳng đa ngôn ngữ (BMP) **

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
31,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
32,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
33,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
34
**A huge array of languages and symbols—mostly Chinese, Japanese, and Korean by volume (also ASCII and Latin alphabets)
***Additional Chinese, Japanese, Korean, and Vietnamese characters, plus more symbols and emojis

65536 đến 1114111

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
35 đến
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
36

Khác***

>>>

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
2

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
37,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
38,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
39,
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
40,

*Chẳng hạn như tiếng Anh, tiếng Ả Rập, tiếng Hy Lạp và Ailen ** một loạt các ngôn ngữ và biểu tượng lớn nhất là tiếng Trung, tiếng Nhật và tiếng Hàn theo tập (cũng , cộng với nhiều biểu tượng và biểu tượng cảm xúc

Còn UTF-16 và UTF-32 thì sao?

Hãy để Lùi trở lại với hai biến thể mã hóa khác, UTF-16 và UTF-32.Sự khác biệt giữa những điều này và UTF-8 là đáng kể trong thực tế. Ở đây, một ví dụ về sự khác biệt chính với chuyển đổi khứ hồi:Trong trường hợp này, việc mã hóa bốn chữ cái Hy Lạp với UTF-8 và sau đó giải mã trở lại văn bản trong UTF-16 sẽ tạo ra một văn bản
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 bằng ngôn ngữ hoàn toàn khác (tiếng Hàn).
Kết quả sai lầm như thế này là có thể khi cùng một mã hóa được sử dụng hai chiều. Hai biến thể của việc giải mã cùng một đối tượng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9 có thể tạo ra kết quả phát sinh ngay cả trong cùng một ngôn ngữ.
Bảng này tóm tắt phạm vi hoặc số byte theo UTF-8, UTF-16 và UTF-32:Mã hóa
Byte trên mỗi ký tự (bao gồm)Chiều dài thay đổiMã hóa
Byte trên mỗi ký tự (bao gồm)4 Chiều dài thay đổi

UTF-8

>>>

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
3

1 đến 4

Đúng

UTF-16

2 đến 4

UTF-32

Không

  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    45
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    46
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    47
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    48
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    49
  • string.encode(encoding='UTF-8',errors='strict')
    71
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    51
  • string.encode(encoding='UTF-8',errors='strict')
    62
  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    53

Một khía cạnh gây tò mò khác của gia đình UTF là UTF-8 sẽ không phải lúc nào cũng chiếm ít không gian hơn UTF-16. Điều đó có vẻ phản trực giác về mặt toán học, nhưng nó hoàn toàn có thể:

  • Lý do cho điều này là các điểm mã trong phạm vi

    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    43 đến
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    44 (2048 đến 65535 trong thập phân) chiếm ba byte trong UTF-8 so với chỉ hai trong UTF-16.
    are for obtaining a different representation of an input. Each one produces a
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8. The first,
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    45, produces an ASCII only representation of an object, with non-ASCII characters escaped. The remaining three give binary, hexadecimal, and octal representations of an integer, respectively. These are only representations, not a fundamental change in the input.

  • The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    47,
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    53 và
    string.encode(encoding='UTF-8',errors='strict')
    71 là các hàm tạo lớp cho các loại tương ứng của chúng,
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    9,
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8 và
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    0. Mỗi người cung cấp các cách ép buộc đầu vào vào loại mong muốn. Chẳng hạn, như bạn đã thấy trước đó, trong khi
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    66 có lẽ là phổ biến hơn, bạn cũng có thể thấy
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    67.
    are class constructors for their respective types,
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    9,
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8, and
    The string is: pythön!
    The encoded version (with ignore) is: b'pythn!'
    The encoded version (with replace) is: b'pyth?n!'
    0. They each offer ways of coercing the input into the desired type. For instance, as you saw earlier, while
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    66 is probably more common, you might also see
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    67.

  • string.encode(encoding='UTF-8',errors='strict')
    62 và
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    48 là nghịch đảo của nhau ở chỗ hàm Python
    string.encode(encoding='UTF-8',errors='strict')
    62 chuyển đổi ký tự
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8 thành điểm mã cơ sở-10 của nó, trong khi
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    48 thực hiện ngược lại.
    are inverses of each other in that the Python
    string.encode(encoding='UTF-8',errors='strict')
    62 function converts a
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    8 character to its base-10 code point, while
    The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    48 does the opposite.

Ở đây, một cái nhìn chi tiết hơn về mỗi chín chức năng này:

Hàm sốChữ kýChấp nhậnLoại trở lạiMục đích
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
45
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
74
Thay đổi
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
82

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
83

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
84

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
85

Thay đổi
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
90

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
91

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
92

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

00

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

01

Thay đổi
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

11

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

12

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

15

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

16

Thay đổi
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8
ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII đã thoát ra

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
46

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
77

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
4

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
5

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
6

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
7

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
8

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
9

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
0

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
1

Đại diện nhị phân của một số nguyên, với tiền tố The string is: pythön! The encoded version is: b'pyth\xc3\xb6n!'80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
47

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
2

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
3

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
47

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9

Ép buộc (chuyển đổi) đầu vào thành

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9, dữ liệu nhị phân thô

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
48
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
89
Chuyển đổi một điểm mã số nguyên thành một ký tự unicode duy nhất
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
49
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
95
Đại diện thập lục phân của một số nguyên, với tiền tố
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
98
string.encode(encoding='UTF-8',errors='strict')
71
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0
Ép buộc (chuyển đổi) đầu vào thành
The string is: pythön!
The encoded version (with ignore) is: b'pythn!'
The encoded version (with replace) is: b'pyth?n!'
0
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
51
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

05
Biểu diễn bát phân của một số nguyên, với tiền tố
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

08
string.encode(encoding='UTF-8',errors='strict')
62
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

10
Chuyển đổi một ký tự unicode duy nhất thành điểm mã số nguyên của nó
The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
53
Ép buộc (chuyển đổi) đầu vào thành
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8, văn bản
Bạn có thể mở rộng phần bên dưới để xem một số ví dụ về từng chức năng.

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
45 cung cấp cho bạn một đại diện chỉ ASCII của một đối tượng, với các ký tự không phải ASCII đã thoát ra:

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
78

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
4

Đại diện nhị phân của một số nguyên, với tiền tố

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
80

  1. The string is: pythön!
    The encoded version is: b'pyth\xc3\xb6n!'
    47

  2. Đối với

    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    57,
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    58 và
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    59, chính xác là nhiều chữ số được yêu cầu như được hiển thị trong các ví dụ này. Điều này có thể ném bạn cho một vòng lặp vì cách các bảng Unicode thường hiển thị các mã cho các ký tự, với số lượng ký tự hex hàng đầu và biến đổi. Điều quan trọng là các bảng Unicode thường không có các mã này.

Chẳng hạn, nếu bạn tham khảo unicode-table.com để biết thông tin về chữ gothic faihu (hoặc FEHU),

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

61, bạn sẽ thấy rằng nó được liệt kê là có mã
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

62.

Làm thế nào để bạn đặt điều này vào

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

44 hoặc
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

47? Chà, bạn có thể phù hợp với nó trong
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

44 bởi vì nó là một nhân vật 4 byte và sử dụng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

47 để thể hiện nhân vật này, bạn sẽ cần phải bỏ lại chuỗi bên trái:

Điều này cũng có nghĩa là mẫu

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

47 là chuỗi thoát duy nhất có khả năng giữ bất kỳ ký tự Unicode nào.

Các mã hóa khác có sẵn trong Python

Cho đến nay, bạn đã thấy bốn mã hóa nhân vật:

  1. Ascii
  2. UTF-8
  3. UTF-16
  4. UTF-32

Có rất nhiều người khác ngoài kia.

Một ví dụ là Latin-1 (còn được gọi là ISO-8859-1), về mặt kỹ thuật là mặc định cho giao thức chuyển siêu văn bản (HTTP), mỗi RFC 2616. Windows có biến thể Latin-1 riêng được gọi là CP1252.

Danh sách đầy đủ các mã hóa được chấp nhận được chôn vùi trong tài liệu cho mô -đun

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

68, là một phần của thư viện tiêu chuẩn Python.

Có một mã hóa được công nhận hữu ích hơn để nhận thức được, đó là

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

69. Nếu bạn có một
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

8 được giải mã và muốn nhanh chóng nhận được một đại diện cho chữ Unicode đã thoát ra của nó, thì bạn có thể chỉ định mã hóa này trong
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# default encoding to utf-8

string_utf = string.encode()

# print result print('The encoded version is:', string_utf)
84:

>>>

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
5

Bạn biết những gì họ nói về các giả định

Chỉ vì Python đưa ra giả định mã hóa UTF-8 cho các tệp và mã mà bạn tạo ra không có nghĩa là bạn, lập trình viên, nên hoạt động với cùng một giả định về dữ liệu bên ngoài.

Hãy để nói điều đó một lần nữa bởi vì nó là một quy tắc để sống bằng cách: khi bạn nhận được dữ liệu nhị phân (byte) từ nguồn bên thứ ba, cho dù đó là từ một tệp hoặc qua mạng, thực tế tốt nhất là kiểm tra xem dữ liệu chỉ định mã hóa. Nếu nó không có, thì nó sẽ hỏi bạn.

Tất cả I/O xảy ra trong byte, không phải văn bản và byte chỉ là những cái và số không cho máy tính cho đến khi bạn nói với nó bằng cách thông báo về mã hóa.

Ở đây, một ví dụ về nơi mọi thứ có thể đi sai. Bạn đã đăng ký API gửi cho bạn một công thức trong ngày mà bạn nhận được trong

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9 và luôn được giải mã bằng cách sử dụng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

73 mà không có vấn đề gì. Vào ngày đặc biệt này, một phần của công thức trông như thế này:

>>>

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
6

Bạn biết những gì họ nói về các giả định

>>>

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
7

Bạn biết những gì họ nói về các giả định

>>>

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
8

Bạn biết những gì họ nói về các giả định

Chỉ vì Python đưa ra giả định mã hóa UTF-8 cho các tệp và mã mà bạn tạo ra không có nghĩa là bạn, lập trình viên, nên hoạt động với cùng một giả định về dữ liệu bên ngoài.

Hãy để nói điều đó một lần nữa bởi vì nó là một quy tắc để sống bằng cách: khi bạn nhận được dữ liệu nhị phân (byte) từ nguồn bên thứ ba, cho dù đó là từ một tệp hoặc qua mạng, thực tế tốt nhất là kiểm tra xem dữ liệu chỉ định mã hóa. Nếu nó không có, thì nó sẽ hỏi bạn.

Tất cả I/O xảy ra trong byte, không phải văn bản và byte chỉ là những cái và số không cho máy tính cho đến khi bạn nói với nó bằng cách thông báo về mã hóa.

Ở đây, một ví dụ về nơi mọi thứ có thể đi sai. Bạn đã đăng ký API gửi cho bạn một công thức trong ngày mà bạn nhận được trong

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

9 và luôn được giải mã bằng cách sử dụng
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

73 mà không có vấn đề gì. Vào ngày đặc biệt này, một phần của công thức trông như thế này:

>>>

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'
9

Bạn biết những gì họ nói về các giả định

Chỉ vì Python đưa ra giả định mã hóa UTF-8 cho các tệp và mã mà bạn tạo ra không có nghĩa là bạn, lập trình viên, nên hoạt động với cùng một giả định về dữ liệu bên ngoài.

Hãy để nói điều đó một lần nữa bởi vì nó là một quy tắc để sống bằng cách: khi bạn nhận được dữ liệu nhị phân (byte) từ nguồn bên thứ ba, cho dù đó là từ một tệp hoặc qua mạng, thực tế tốt nhất là kiểm tra xem dữ liệu chỉ định mã hóa. Nếu nó không có, thì nó sẽ hỏi bạn.

  • Tất cả I/O xảy ra trong byte, không phải văn bản và byte chỉ là những cái và số không cho máy tính cho đến khi bạn nói với nó bằng cách thông báo về mã hóa.
  • Ở đây, một ví dụ về nơi mọi thứ có thể đi sai. Bạn đã đăng ký API gửi cho bạn một công thức trong ngày mà bạn nhận được trong
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    9 và luôn được giải mã bằng cách sử dụng
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    73 mà không có vấn đề gì. Vào ngày đặc biệt này, một phần của công thức trông như thế này:
  • Có vẻ như công thức gọi một số bột, nhưng chúng tôi không biết bao nhiêu:
  • Uh oh. Có một số người mắc bệnh
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    3 có thể cắn bạn khi bạn đưa ra các giả định về mã hóa. Bạn kiểm tra với máy chủ API. Lo và kìa, dữ liệu thực sự được gửi qua được mã hóa trong Latin-1:

Chúng tôi đi ở đó. Trong Latin-1, mọi nhân vật đều phù hợp với một byte duy nhất, trong khi ký tự ¼ ¼ chiếm hai byte trong UTF-8 (

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

75).

Bài học ở đây là nó có thể nguy hiểm khi cho rằng việc mã hóa bất kỳ dữ liệu nào được gửi cho bạn. Nó thường là UTF-8 trong những ngày này, nhưng nó có tỷ lệ nhỏ trong các trường hợp mà nó không phải là điều đó sẽ thổi bay mọi thứ.

Nếu bạn thực sự cần phải từ bỏ tàu và đoán mã hóa, thì hãy xem thư viện

# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

76, sử dụng phương pháp từ Mozilla để đưa ra dự đoán có giáo dục về văn bản được mã hóa mơ hồ. Điều đó nói rằng, một công cụ như
# unicode string
string = 'pythön!'

# print string
print('The string is:', string)

# ignore error

print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

# replace error

print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

76 nên là phương sách cuối cùng của bạn, không phải đầu tiên của bạn.

  • Tỷ lệ cược và kết thúc:
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    78
    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
  • Chúng tôi sẽ không đề cập đến
    # unicode string
    string = 'pythön!'
    
    # print string
    print('The string is:', string)
    
    # ignore error
    

    print('The encoded version (with ignore) is:', string.encode("ascii", "ignore"))

    # replace error

    print('The encoded version (with replace) is:', string.encode("ascii", "replace"))

    78 từ Thư viện tiêu chuẩn Python, cho phép bạn tương tác và tra cứu trên cơ sở dữ liệu ký tự Unicode (UCD):
    What every programmer absolutely, positively needs to know about encodings and character sets to work with text
  • Gói lên A composite approach to language/encoding detection
  • Trong bài viết này, bạn đã giải mã chủ đề rộng rãi và áp đặt mã hóa nhân vật trong Python. UTF-8
  • John Skeet: Unicode và .net Unicode and .NET
  • Charles Petzold: Mã: Ngôn ngữ ẩn của phần cứng và phần mềm máy tính Code: The Hidden Language of Computer Hardware and Software
  • Nhóm làm việc mạng, RFC 3629: UTF-8, Định dạng chuyển đổi của ISO 10646 UTF-8, a transformation format of ISO 10646
  • Tiêu chuẩn kỹ thuật Unicode #18: Các biểu thức chính quy Unicode Unicode Regular Expressions

Các tài liệu Python có hai trang về chủ đề:

  • Những gì mới trong Python 3.0
  • Unicode Howto

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem nó cùng với hướng dẫn bằng văn bản để làm sâu sắc thêm sự hiểu biết của bạn: Unicode in Python: Làm việc với mã hóa ký tự This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Unicode in Python: Working With Character Encodings

Mã hóa và unicode là gì?

Tiêu chuẩn mã hóa ký tự Unicode là sơ đồ mã hóa ký tự có độ dài cố định bao gồm các ký tự từ hầu hết các ngôn ngữ sống trên thế giới. Thông tin về Unicode có thể được tìm thấy trong tiêu chuẩn Unicode và từ trang web Unicode Consortium tại www.unicode.org.a fixed-length, character encoding scheme that includes characters from almost all of the living languages of the world. Information about Unicode can be found in The Unicode Standard , and from the Unicode Consortium website at www.unicode.org.

Unicode và ASCII trong Python là gì?

Unicode là mã hóa ký tự phổ quát được sử dụng để xử lý, lưu trữ và tạo điều kiện trao đổi dữ liệu văn bản bằng bất kỳ ngôn ngữ nào trong khi ASCII được sử dụng để biểu diễn văn bản như ký hiệu, chữ cái, chữ số, v.v. trong máy tính.ASCII: Đây là một tiêu chuẩn mã hóa ký tự cho giao tiếp điện tử.

Sự khác biệt giữa UTF và Unicode là gì?

Sự khác biệt giữa Unicode và UTF-8 Unicode là một bộ ký tự.UTF-8 đang mã hóa.Unicode là danh sách các ký tự có số thập phân duy nhất (điểm mã).Unicode is a character set. UTF-8 is encoding. Unicode is a list of characters with unique decimal numbers (code points).

Mã hóa có nghĩa là gì trong Python?

Vì Python 3.0, các chuỗi được lưu trữ dưới dạng unicode, tức là mỗi ký tự trong chuỗi được biểu thị bằng một điểm mã.Vì vậy, mỗi chuỗi chỉ là một chuỗi các điểm mã Unicode.Để lưu trữ hiệu quả các chuỗi này, chuỗi các điểm mã được chuyển đổi thành một tập hợp các byte.Quá trình được gọi là mã hóa.the sequence of code points is converted into a set of bytes. The process is known as encoding.