Hướng dẫn convert unicode to bytes python - chuyển đổi unicode sang byte python

Chuyển ký tự Unicode sang

list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
1 để lấy điểm mã của nó và sau đó chia điểm mã đó thành các byte cá nhân với
list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
2 và sau đó định dạng đầu ra theo cách bạn muốn:

list(map(lambda b: hex(b)[2:], ord('\u4132').to_bytes(4, 'big')))

Trả lại:

list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
3

list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))

Trả lại:

list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
4

Như tôi đã đề cập trên một nhận xét khác, mã hóa điểm mã thành UTF16 sẽ không hoạt động như mong đợi đối với các điểm mã bên ngoài BMP (mặt phẳng đa ngôn ngữ cơ bản) vì UTF16 sẽ cần một cặp thay thế để mã hóa các điểm mã đó.

Chuyển đổi chuỗi unicode thành byte là khá phổ biến ngày nay vì cần phải chuyển đổi chuỗi thành byte để xử lý các tệp hoặc học máy. Hãy cùng xem làm thế nào điều này có thể được thực hiện.

Phương pháp 1 Chức năng tích hợp Byte ()bytes()

Một chuỗi có thể được chuyển đổi thành byte bằng hàm chung byte (). Hàm này chỉ vào thư viện CPython, thực hiện chức năng mã hóa để chuyển đổi chuỗi thành mã hóa được chỉ định. Hãy để xem cách thức hoạt động của nó và kiểm tra ngay lập tức kiểu dữ liệu:bytes() generic function. This function internally points to the CPython library, which performs an encoding function to convert the string to the specified encoding. Let’s see how it works and immediately check the data type:

A = 'Hello'
>>>print(bytes(A, 'utf-8'), type(bytes(A, 'utf-8')))
# b'Hello' 

Một B theo nghĩa đen xuất hiện - một dấu hiệu cho thấy nó là một chuỗi các byte. Không giống như phương thức sau, hàm byte () không áp dụng bất kỳ mã hóa nào theo mặc định, nhưng yêu cầu nó phải được chỉ định rõ ràng và nếu không hãy nâng cao đối số chuỗi: chuỗi mà không có mã hóa.b appeared – a sign that it is a string of bytes. Unlike the following method, the bytes() function does not apply any encoding by default, but requires it to be explicitly specified and otherwise raises the TypeError: string argument without an encoding.

Phương thức 2 mã hóa chức năng tích hợp ()

Có lẽ phương pháp phổ biến nhất để thực hiện nhiệm vụ này sử dụng chức năng mã hóa để thực hiện chuyển đổi và không sử dụng một tham chiếu bổ sung cho một thư viện cụ thể, chức năng này gọi nó trực tiếp.

Hàm tích hợp mã hóa () được áp dụng cho chuỗi unicode và tạo một chuỗi byte trong đầu ra, được sử dụng trong hai đối số: sơ đồ mã hóa chuỗi đầu vào và trình xử lý lỗi. Bất kỳ mã hóa nào cũng có thể được sử dụng trong sơ đồ mã hóa: ASCII, UTF-8 (được sử dụng theo mặc định), UTF-16, Latin-1, v.v. Xử lý lỗi có thể hoạt động theo nhiều cách:encode() is applied to a Unicode string and produces a string of bytes in the output, used in two arguments: the input string encoding scheme and an error handler. Any encoding can be used in the encoding scheme: ASCII, UTF-8 (used by default), UTF-16, latin-1, etc. Error handling can work in several ways:

nghiêm ngặt - được sử dụng theo mặc định, sẽ tăng unicodeerror khi kiểm tra một ký tự không được hỗ trợ bởi mã hóa này; – used by default, will raise a UnicodeError when checking for a character that is not supported by this encoding;

Bỏ qua - các ký tự không được hỗ trợ bị bỏ qua; – unsupported characters are skipped;

Thay thế - các ký tự không được hỗ trợ được thay thế bằng cách? – unsupported characters are replaced with “?”;

xmlcharrefreplace-ký tự không được hỗ trợ được thay thế bằng đại diện XML tương ứng của chúng; – unsupported characters are replaced with their corresponding XML-representation;

Backslashreplace - Các ký tự không được hỗ trợ được thay thế bằng các chuỗi bắt đầu bằng dấu gạch chéo ngược; – unsupported characters are replaced with sequences starting with a backslash;

NamePlace - Các ký tự không được hỗ trợ được thay thế bằng các chuỗi như \ n {Tiết}; SurrogateScape - thay thế từng byte bằng mã thay thế, từ U+DC80 đến U+DCFF; – unsupported characters are replaced with sequences like \N{…};surrogateescape – replaces each byte with a surrogate code, from U+DC80 to U+DCFF;

SurrogatePass-Bỏ qua các mã thay thế, được sử dụng với các mã hóa sau: UTF-8, UTF-16, UTF-32, UTF-16-BE, UTF-16-LE, UTF-32-BE, UTF-32-le. – ignores surrogate codes, is used with the following encodings: utf-8, utf-16, utf-32, utf-16-be, utf-16-le, utf-32-be, utf-32-le.

Hãy xem xét một ví dụ:

A = '\u0048\u0065\u006C\u006C\u006F'
>>>print(A.encode())
# b'Hello'

Trong ví dụ này, chúng tôi không chỉ định rõ ràng phương thức mã hóa hoặc xử lý lỗi, chúng tôi đã sử dụng các giá trị mặc định-mã hóa UTF-8 và phương thức nghiêm ngặt, không gây ra lỗi nào. Nhưng điều này rất nản lòng, vì các nhà phát triển khác có thể không chỉ sử dụng các mã hóa ngoài UTF-8 và không khai báo nó trong tiêu đề, mà các Metacharacters được sử dụng có thể khác với nội dung.strict method, which did not cause any errors. But this is highly discouraged, since other developers may not only use encodings other than UTF-8 and not declare it in the header, but the metacharacters used may differ from the content.

Python chuyển đổi Unicode thành ASCII

Bây giờ, hãy để Lừa nhìn vào các phương pháp để chuyển đổi chuỗi byte tiếp theo. Chúng ta cần có một chuỗi ascii unicode.

Phương pháp 1 Giải mã chức năng tích hợp ()decode()

Hàm giải mã (), như mã hóa (), hoạt động với hai đối số - mã hóa và xử lý lỗi. Hãy để xem cách thức hoạt động của nó:decode() function, like encode(), works with two arguments – encoding and error handling. Let’s see how it works:

>>>print(A.encode('ascii').decode('ascii'))
# Hello

Phương pháp này là tốt nếu chuỗi unicode đầu vào được mã hóa trong ASCII hoặc các nhà phát triển khác chịu trách nhiệm và tuyên bố rõ ràng việc mã hóa trong tiêu đề, nhưng ngay khi một CodePoint xuất hiện trong phạm vi từ 0 đến 127, phương thức không hoạt động:

A = '\u0048\u0065\u006C\u006C\u006F\t\u5316\u4EB1'
>>>print(A.encode('ascii').decode('ascii'))
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 6-7: ordinal not in range(128)

Ví dụ: bạn có thể sử dụng các trình xử lý lỗi khác nhau, BackslashReplace (để thay thế các ký tự không được hỗ trợ bằng các chuỗi bắt đầu bằng các dấu gạch chéo ngược) hoặc namerplace (để chèn các chuỗi như \ n {Muff}):backslashreplace (to replace unsupported characters with sequences starting with backslashes) or namereplace (to insert sequences like \ N {…}):

A = '\u0048\u0065\u006C\u006C\u006F\t\u5316\u4EB1'
>>>print(A.encode('ascii', 'backslashreplace').decode('ascii','backslashreplace'))
# Hello	\u5316\u4eb1
>>>print(A.encode('ascii', 'namereplace').decode('ascii','namereplace'))
# Hello	\N{CJK UNIFIED IDEOGRAPH-5316}\N{CJK UNIFIED IDEOGRAPH-4EB1}

Do đó, chúng ta có thể nhận được một câu trả lời không được mong đợi hoặc không chính xác, điều này có thể dẫn đến các lỗi thêm hoặc lãng phí thời gian vào việc xử lý bổ sung.

Phương thức 2 mô -đun unidecode ()decode()

PYPI có mô -đun Unidecode, nó xuất một hàm lấy chuỗi Unicode và trả về một chuỗi có thể được mã hóa thành các byte ASCII trong Python 3.x: has a unidecode module, it exports a function that takes a Unicode string and returns a string that can be encoded into ASCII bytes in Python 3.x:

>>>from unidecode import unidecode
>>>print(unidecode(A))
# Hello	Hua Ye

Bạn cũng có thể cung cấp một đối số lỗi cho unidecode (), trong đó xác định những việc cần làm với các ký tự không có trong các bảng phiên âm của nó. Mặc định là bỏ qua, điều đó có nghĩa là unidecode bỏ qua các ký tự này (thay thế chúng bằng một chuỗi trống). nghiêm ngặt sẽ tăng unidecodeerror. Đối tượng loại trừ sẽ chứa một thuộc tính chỉ mục có thể được sử dụng để tìm ký tự không hợp lệ. Thay thế sẽ thay thế chúng bằng "?" (hoặc một chuỗi khác được chỉ định trong đối số thay thế_str). Bảo tồn sẽ lưu ký tự không ASCII ban đầu trong chuỗi. Lưu ý rằng nếu bảo quản được sử dụng, chuỗi được trả về bởi unidecode () sẽ không được mã hóa ASCII! Đọc thêm tại đây.unidecode(), which determines what to do with characters not present in its transliteration tables. The default is ignore, which means that Unidecode ignores these characters (replaces them with an empty string). strict will raise UnidecodeError. The exclusion object will contain an index attribute that can be used to find the invalid character. replace will replace them with “?” (or another string specified in the replace_str argument). The preserve will save the original non-ASCII character in the string. Note that if preserve is used, the string returned by unidecode() will not be ASCII encoded! Read more here.

Python chuyển đổi Unicode sang UTF-8

Do thực tế là mã hóa UTF-8 được sử dụng theo mặc định trong Python và là phổ biến nhất hoặc thậm chí trở thành một loại tiêu chuẩn, cũng như giả định rằng các nhà phát triển khác đối xử với nó theo cách tương tự và không quên tuyên bố mã hóa Trong tiêu đề tập lệnh, chúng ta có thể nói rằng hầu hết tất cả các tác vụ xử lý chuỗi đều sôi sục để mã hóa/giải mã từ/đến UTF-8.

Đối với nhiệm vụ này, cả hai phương pháp trên đều được áp dụng.

Phương thức 1 mã hóa chức năng tích hợp () và giải mã ()encode() and decode()

Với accod (), trước tiên chúng tôi nhận được một chuỗi byte bằng cách áp dụng mã hóa UTF-8 cho chuỗi unicode đầu vào, sau đó sử dụng Decode (), sẽ cung cấp cho chúng tôi chuỗi unicode được mã hóa UTF-8 có thể đọc được và có thể được hiển thị hoặc có thể được hiển thị đến bảng điều khiển cho người dùng hoặc in.encode(), we first get a byte string by applying UTF-8 encoding to the input Unicode string, and then use decode(), which will give us a UTF-8 encoded Unicode string that is already readable and can be displayed or to the console to the user or printed.

B = '\u0048\u0065\u006C\u006C\u006F\t\u5316\u4EB1\t\u041f\u0440\u0438\u0432\u0435\u0442'
>>>print(B.encode('utf-8').decode('utf-8'))
# Hello	化亱	Привет

Vì khó có thể tưởng tượng một ký tự được sử dụng trong các ứng dụng, môi trường hoặc môi trường hoạt động phổ biến không có điểm mã riêng trong UTF-8, việc chỉ định phương thức xử lý lỗi có thể bị bỏ qua.

Phương pháp 2 mô -đun unidecodeunidecode

>>>print(list(map(float, [ord(i) for i in B])))
# [72.0, 101.0, 108.0, 108.0, 111.0]

Hoặc chúng ta có thể sử dụng một vòng lặp và kiểu dữ liệu của mỗi ký tự sẽ nổi, vì chúng ta được chỉ định rõ ràng để chuyển đổi sang loại này:for loop, and the data type of each character will be float, since we explicitly indicated to convert to this type:

list(map(lambda b: hex(b)[2:], ord('\N{PILE OF POO}').to_bytes(4, 'big')))
0

Làm thế nào để bạn chuyển đổi sang byte trong Python?

Chúng ta có thể sử dụng lớp byte tích hợp trong Python để chuyển đổi chuỗi thành byte: chỉ cần chuyển chuỗi làm đầu vào đầu tiên của hàm tạo của lớp byte và sau đó chuyển mã hóa làm đối số thứ hai. In đối tượng hiển thị một biểu diễn văn bản thân thiện với người dùng, nhưng dữ liệu có trong đó là trong byte.pass the string as the first input of the constructor of the Bytes class and then pass the encoding as the second argument. Printing the object shows a user-friendly textual representation, but the data contained in it is​ in bytes.

Unicode và byte trong Python là gì?

Để tóm tắt phần trước: Chuỗi Unicode là chuỗi các điểm mã, là số từ 0 đến 0x10FFFF (1,114,111 thập phân).Trình tự các điểm mã này cần được biểu diễn trong bộ nhớ dưới dạng một tập hợp các đơn vị mã và các đơn vị mã sau đó được ánh xạ tới 8 bit byte.a Unicode string is a sequence of code points, which are numbers from 0 through 0x10FFFF (1,114,111 decimal). This sequence of code points needs to be represented in memory as a set of code units, and code units are then mapped to 8-bit bytes.

Unicode () làm gì trong Python?

Nếu mã hóa và/hoặc lỗi được đưa ra, unicode () sẽ giải mã đối tượng có thể là chuỗi 8 bit hoặc bộ đệm ký tự sử dụng codec để mã hóa.Tham số mã hóa là một chuỗi cho tên mã hóa;Nếu mã hóa không được biết, lookuperror được nâng lên.decode the object which can either be an 8-bit string or a character buffer using the codec for encoding. The encoding parameter is a string giving the name of an encoding; if the encoding is not known, LookupError is raised.

Mã hóa UTF là gì

UTF-8: Nó sử dụng 1, 2, 3 hoặc 4 byte để mã hóa mọi điểm mã.Nó tương thích ngược với ASCII.Tất cả các ký tự tiếng Anh chỉ cần 1 byte - khá hiệu quả.Chúng ta chỉ cần nhiều byte hơn nếu chúng ta gửi các ký tự không phải tiếng Anh.Đây là hình thức mã hóa phổ biến nhất và theo mặc định mã hóa trong Python 3.