Python 3 có hỗ trợ Unicode không?

Mục tiêu chính của bảng gian lận này là thu thập một số đoạn phổ biến có liên quan đến Unicode. Trong Python 3, các chuỗi được biểu thị bằng Unicode thay vì byte. Thông tin thêm có thể được tìm thấy trên PEP 3100

Mã ASCII là tiêu chuẩn nổi tiếng nhất xác định mã số cho các ký tự. Các giá trị số ban đầu chỉ xác định 128 ký tự, vì vậy ASCII chỉ chứa mã điều khiển, chữ số, chữ thường, chữ in hoa, v.v. Tuy nhiên, nó không đủ để chúng tôi đại diện cho các ký tự như ký tự có dấu, ký tự Trung Quốc hoặc biểu tượng cảm xúc tồn tại trên toàn thế giới. Do đó, Unicode đã được phát triển để giải quyết vấn đề này. Nó xác định điểm mã để đại diện cho các ký tự khác nhau như ASCII nhưng số lượng ký tự lên tới 1.111.998

Mục lục

Chuỗi

Trong Python 2, các chuỗi được biểu thị bằng byte, không phải Unicode. Python cung cấp các loại chuỗi khác nhau như chuỗi Unicode, chuỗi thô, v.v. Trong trường hợp này, nếu muốn khai báo một chuỗi Unicode, chúng ta thêm tiền tố

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
3 cho chuỗi ký tự

>>> s = 'Café'  # byte string
>>> s
'Caf\xc3\xa9'
>>> type[s]

>>> u = u'Café' # unicode string
>>> u
u'Caf\xe9'
>>> type[u]

Trong Python 3, các chuỗi được biểu diễn bằng Unicode. Nếu chúng ta muốn biểu diễn một chuỗi byte, chúng ta thêm tiền tố

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
4 cho chuỗi ký tự. Lưu ý rằng các phiên bản Python đầu tiên [3. 0-3. 2] không hỗ trợ tiền tố
>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
3. Để giảm bớt khó khăn khi di chuyển các ứng dụng nhận biết Unicode từ Python 2, Python 3. 3 một lần nữa hỗ trợ tiền tố
>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
3 cho chuỗi ký tự. Thông tin thêm có thể được tìm thấy trên PEP 414

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'

Nhân vật

Python 2 lấy tất cả các ký tự chuỗi dưới dạng byte. Trong trường hợp này, độ dài của chuỗi có thể không tương đương với số lượng ký tự. Ví dụ: độ dài của

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
7 là 5, không phải 4 vì
>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
8 được mã hóa dưới dạng ký tự 2 byte

________số 8_______

Python 3 lấy tất cả các ký tự chuỗi làm điểm mã Unicode. Độ dài của một chuỗi luôn tương đương với số ký tự

>>> s = 'Café'
>>> print[[_c for _c in s]]
['C', 'a', 'f', 'é']
>>> len[s]
4
>>> bs = bytes[s, encoding='utf-8']
>>> print[bs]
b'Caf\xc3\xa9'
>>> len[bs]
5

Chuyển unicode[s, 'utf-8']

Hàm tích hợp đã bị xóa trong Python 3, vậy cách tốt nhất để chuyển đổi biểu thức

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
9 để nó hoạt động trong cả Python 2 và 3 là gì?

Trong Python 2

>>> s = 'Café'
>>> unicode[s, 'utf-8']
u'Caf\xe9'
>>> s.decode['utf-8']
u'Caf\xe9'
>>> unicode[s, 'utf-8'] == s.decode['utf-8']
True

Trong Trăn 3

>>> s = 'Café'
>>> s.decode['utf-8']
AttributeError: 'str' object has no attribute 'decode'

Vì vậy, câu trả lời thực sự là…

Điểm mã Unicode

là một chức năng tích hợp mạnh mẽ để lấy điểm mã Unicode từ một ký tự nhất định. Do đó, nếu chúng tôi muốn kiểm tra điểm mã Unicode của một ký tự, chúng tôi có thể sử dụng

>>> s= 'Café'
>>> print[[_c for _c in s]]
['C', 'a', 'f', '\xc3', '\xa9']
>>> len[s]
5
>>> s = u'Café'
>>> print[[_c for _c in s]]
[u'C', u'a', u'f', u'\xe9']
>>> len[s]
4
0

>>> s = u'Café'
>>> for _c in s: print['U+%04x' % ord[_c]]
...
U+0043
U+0061
U+0066
U+00e9
>>> u = '中文'
>>> for _c in u: print['U+%04x' % ord[_c]]
...
U+4e2d
U+6587

mã hóa

Một điểm mã Unicode chuyển sang một chuỗi byte được gọi là mã hóa

>>> s = u'Café'
>>> type[s.encode['utf-8']]

giải mã

Một chuỗi byte chuyển sang một điểm mã Unicode được gọi là giải mã

>>> s = bytes['Café', encoding='utf-8']
>>> s.decode['utf-8']
'Café'

Chuẩn hóa Unicode

Một số ký tự có thể được biểu diễn ở hai dạng giống nhau. Ví dụ: ký tự,

>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
8 có thể được viết là
>>> s= 'Café'
>>> print[[_c for _c in s]]
['C', 'a', 'f', '\xc3', '\xa9']
>>> len[s]
5
>>> s = u'Café'
>>> print[[_c for _c in s]]
[u'C', u'a', u'f', u'\xe9']
>>> len[s]
4
2 [Phân tách chính tắc] hoặc
>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
8 [Bố cục chính tắc]. Trong trường hợp này, chúng tôi có thể nhận được kết quả không mong muốn khi so sánh hai chuỗi mặc dù chúng trông giống nhau. Do đó, chúng ta có thể chuẩn hóa một dạng Unicode để giải quyết vấn đề

# python 3
>>> u1 = 'Café'       # unicode string
>>> u2 = 'Cafe\u0301'
>>> u1, u2
['Café', 'Café']
>>> len[u1], len[u2]
[4, 5]
>>> u1 == u2
False
>>> u1.encode['utf-8'] # get u1 byte string
b'Caf\xc3\xa9'
>>> u2.encode['utf-8'] # get u2 byte string
b'Cafe\xcc\x81'
>>> from unicodedata import normalize
>>> s1 = normalize['NFC', u1]  # get u1 NFC format
>>> s2 = normalize['NFC', u2]  # get u2 NFC format
>>> s1 == s2
True
>>> s1.encode['utf-8'], s2.encode['utf-8']
[b'Caf\xc3\xa9', b'Caf\xc3\xa9']
>>> s1 = normalize['NFD', u1]  # get u1 NFD format
>>> s2 = normalize['NFD', u2]  # get u2 NFD format
>>> s1, s2
['Café', 'Café']
>>> s1 == s2
True
>>> s1.encode['utf-8'], s2.encode['utf-8']
[b'Cafe\xcc\x81', b'Cafe\xcc\x81']

Tránh
>>> s = 'Café'
>>> type[s]

>>> s
'Café'
>>> s.encode['utf-8']
b'Caf\xc3\xa9'
>>> s.encode['utf-8'].decode['utf-8']
'Café'
2

Python tăng UnicodeDecodeError khi chuỗi byte không thể giải mã thành điểm mã Unicode. Nếu chúng ta muốn tránh ngoại lệ này, chúng ta có thể chuyển đối số thay thế, dấu gạch chéo ngược hoặc bỏ qua đối số lỗi trong

Python 3 có Unicode không?

Trong Python3, chuỗi mặc định được gọi là chuỗi Unicode [u string] , bạn có thể hiểu chúng là các ký tự mà con người có thể đọc được. Như đã giải thích ở trên, bạn có thể mã hóa chúng thành chuỗi byte [chuỗi b] và chuỗi byte có thể được giải mã trở lại chuỗi Unicode.

Làm cách nào để in chuỗi Unicode trong Python3?

Để in ký tự Unicode trong Python, chúng ta có thể sử dụng chuỗi thoát \u . Chúng ta có thể sử dụng chuỗi thoát \u để in ký tự Unicode trong Python. Chúng ta có thể chỉ định điểm mã với chuỗi này để hiển thị ký tự.

Làm cách nào để chuyển đổi byte Unicode thành chuỗi Python 3?

Để chuyển chuỗi byte thành Unicode hãy sử dụng chuỗi byte. decode[] phương pháp và sử dụng str. encode[] để chuyển đổi Unicode thành chuỗi byte . Cả hai phương pháp đều cho phép mã hóa bộ ký tự được chỉ định làm tham số tùy chọn nếu yêu cầu một thứ khác ngoài UTF-8.

Chủ Đề