Chuyển ký tự đặc biệt sang unicode python

Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển đổi một chuỗi thành UTF-8 trong Python. Chúng tôi cũng sẽ sử dụng một số hàm tích hợp và một số mã tùy chỉnh. Trước tiên chúng ta hãy xem nhanh chuỗi trong Python là gì

Chuỗi Python

Chuỗi là một loại trong ngôn ngữ python giống như số nguyên, số float, boolean, v.v. Dữ liệu được bao quanh bởi dấu nháy đơn hoặc nháy kép được gọi là một chuỗi. Chuỗi còn được gọi là dãy ký tự

string1 = "apple"
string2 = "Preeti125"
string3 = "12345"
string4 = "pre@12"

UTF-8 trong Python là gì?

UTF là

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
4 và '8' có nghĩa là các giá trị 8 bit được sử dụng trong mã hóa. Đây là một trong những định dạng mã hóa hiệu quả và thuận tiện nhất trong số các mã hóa khác nhau. Trong Python, Chuỗi theo mặc định ở định dạng utf-8, nghĩa là mỗi bảng chữ cái tương ứng với một điểm mã duy nhất. utf-8 mã hóa chuỗi Unicode thành byte. Người dùng nhận dữ liệu chuỗi trên máy chủ thay vì byte vì một số khung hoặc thư viện trên hệ thống đã chuyển đổi ngầm một số byte ngẫu nhiên thành chuỗi và điều này xảy ra do mã hóa

Người dùng có thể gặp phải trường hợp máy chủ của anh ta nhận được các ký tự utf-8 nhưng khi anh ta cố truy xuất nó từ chuỗi truy vấn, anh ta nhận được mã ASCII. Vì vậy, để chuyển chuỗi thuần túy sang utf-8, chúng ta sẽ sử dụng phương thức

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
5 để chuyển chuỗi thành utf-8 trong python 3

Sử dụng mã hóa () để chuyển đổi Chuỗi thành UTF-8

Phương thức

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
5 trả về phiên bản được mã hóa của chuỗi. Trong trường hợp không thành công, có thể xảy ra ngoại lệ UnicodeDecodeError

cú pháp

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

Thông số

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
7 - ​​loại mã hóa như 'UTF-8', ASCII, v.v.

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
8 - phản hồi khi mã hóa không thành công

Có sáu loại phản hồi lỗi

  • nghiêm ngặt - phản hồi mặc định làm tăng ngoại lệ UnicodeDecodeError khi thất bại
  • bỏ qua - bỏ qua Unicode không mã hóa được từ kết quả
  • thay thế - thay thế Unicode không thể mã hóa thành dấu chấm hỏi?
  • xmlcharrereplace - chèn tham chiếu ký tự XML thay vì Unicode không mã hóa được
  • backslashreplace - chèn một chuỗi thoát \uNNNN thay vì Unicode không mã hóa được
  • namereplace - chèn \N{. } chuỗi thoát thay vì Unicode không mã hóa được

Theo mặc định, phương thức encode() không nhận bất kỳ tham số nào

Thí dụ

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


Phiên bản được mã hóa là. b'pyth\xc3\xb6n. '

Phần kết luận

Trong bài viết này, chúng ta đã học cách chuyển đổi một chuỗi đơn giản sang định dạng utf-8 bằng phương thức

# unicode string
string = 'pythön!'
# default encoding to utf-8
string_utf = string.encode()
print('The encoded version is:', string_utf)
5. Bạn cũng có thể thử sử dụng các định dạng mã hóa và tham số lỗi khác nhau

Hướng dẫn này sẽ chỉ cho bạn cách chuyển đổi chuỗi Unicode thành chuỗi trong Python. Nếu bạn đã biết về Unicode, có thể bỏ qua phần nền tảng sau và đi sâu vào vấn đề ngay

Nền Unicode

Một chút về Unicode từ Wikipedia

Unicode là một tiêu chuẩn mã hóa ký tự bao gồm các ký tự từ hầu hết các ngôn ngữ viết trên thế giới. Tiêu chuẩn hiện đang phổ biến trên Internet

Tiêu chuẩn được đề xuất vào năm 1991 bởi tổ chức phi lợi nhuận “Unicode Consortium” (Unicode Inc). Việc sử dụng tiêu chuẩn này cho phép mã hóa một số lượng rất lớn các ký tự từ các hệ thống chữ viết khác nhau. trong các tài liệu được mã hóa theo tiêu chuẩn Unicode, chữ tượng hình Trung Quốc, ký hiệu toán học, chữ cái trong bảng chữ cái Hy Lạp, bảng chữ cái Latinh và Cyrillic, ký hiệu ký hiệu âm nhạc trở nên không cần thiết và chuyển đổi trang mã trở nên không cần thiết

Trong Unicode, có một số dạng biểu diễn (Dạng chuyển đổi Unicode, UTF). UTF-8, UTF-16 (UTF-16BE, UTF-16LE) và UTF-32 (UTF-32BE, UTF-32LE). Trong luồng dữ liệu, UTF-16 byte thấp có thể được ghi trước thứ tự cao (UTF-16 little-endian, UTF-16LE) hoặc sau thứ tự cao (UTF-16 big-endian, UTF-16BE). Tương tự như vậy, có hai biến thể của dạng trình bày bốn byte – UTF-32LE và UTF-32BE. Tất cả chúng còn được gọi là mã hóa

Microsoft Windows NT và các hệ thống dựa trên nó chủ yếu sử dụng biểu mẫu UTF-16LE. Các hệ điều hành giống UNIX GNU / Linux, BSD và Mac OS X áp dụng UTF-8 cho tệp và UTF-32 hoặc UTF-8 để xử lý ký tự trong bộ nhớ

Thông thường, chúng tôi nhận được dưới dạng đầu vào là một chuỗi ký tự Unicode, người dùng thông thường không thể đọc được, nhưng có nhiều ưu điểm so với văn bản thông thường, chẳng hạn như nó chiếm ít dung lượng bộ nhớ hơn hoặc mất ít thời gian hơn để xử lý và chuyển tiếp. Tùy thuộc vào các yêu cầu tiếp theo đối với chuỗi Unicode hoặc tùy thuộc vào môi trường (cho dù đó là hệ điều hành hay phần mềm), cần xác định bảng mã có thể và nên được sử dụng

UTF-8 hiện là mã hóa thống trị trên web. UTF-8, so với UTF-16, mang lại mức tăng lớn nhất về độ gọn cho các văn bản bằng tiếng Latinh, vì các chữ cái Latinh, số và dấu chấm câu phổ biến nhất được mã hóa bằng UTF-8 chỉ bằng một byte và mã của những

UTF-16 là bảng mã cho phép viết các ký tự Unicode trong các dải U+0000…U+D7FF và U+E000…U+10FFFF (với tổng là 1112064). Hơn nữa, mỗi ký tự được viết bằng một hoặc hai từ (cặp thay thế)

UTF-32 là một cách biểu diễn Unicode trong đó mỗi ký tự chính xác là 4 byte. Ưu điểm chính của UTF-32 so với mã hóa có độ dài thay đổi là các ký tự Unicode trong đó có thể được lập chỉ mục trực tiếp, do đó, việc tìm kiếm một ký tự theo số vị trí của nó trong tệp có thể cực kỳ nhanh và nhận được bất kỳ ký tự nào ở vị trí thứ n là một . Nó cũng giúp dễ dàng thay thế các ký tự trong chuỗi UTF-32. Ngược lại, mã hóa có độ dài thay đổi yêu cầu truy cập tuần tự vào ký tự thứ n, điều này có thể rất tốn thời gian. Nhược điểm chính của UTF-32 là việc sử dụng không gian không hiệu quả vì bốn byte được sử dụng để lưu trữ bất kỳ ký tự nào

Xây dựng vấn đề

Giả sử chúng ta có một chuỗi Unicode và chúng ta cần chuyển đổi nó thành chuỗi Python

A = '\u0048\u0065\u006C\u006C\u006F'

Hãy chắc chắn về kiểu dữ liệu đầu vào

>>> type(A)

Phương pháp 1. Chuỗi

Trong Python 3, tất cả văn bản là chuỗi Unicode theo mặc định, điều đó cũng có nghĩa là cú pháp

>>> type(A)

3 không còn được sử dụng nữa

Hầu hết các trình thông dịch Python đều hỗ trợ Unicode và khi chức năng in được gọi, trình thông dịch sẽ chuyển đổi chuỗi đầu vào từ các ký tự thoát Unicode thành một chuỗi

print(str(A))
# Hello

Không có ý nghĩa gì khi kiểm tra kiểu dữ liệu sau khi áp dụng phương thức chuỗi

Phương pháp 2. đại diện()

Hàm

>>> type(A)

4 tích hợp trả về một chuỗi chứa biểu diễn chính thức có thể in được của một đối tượng

________số 8

Kiểm tra kiểu dữ liệu

print(type(repr(A)))
# 

Phương pháp 3. Mô-đun Unicodedata, chức năng chuẩn hóa

Hàm

>>> type(A)

5 của mô-đun Unicodedata trả về dạng bình thường cho chuỗi Unicode. Các giá trị hợp lệ cho biểu mẫu là NFC, NFKC, NFD và NFKD

Tiêu chuẩn Unicode xác định các dạng chuẩn hóa chuỗi Unicode khác nhau dựa trên định nghĩa về tương đương chuẩn và tương đương tương thích. Trong Unicode, nhiều ký tự có thể được thể hiện theo nhiều cách khác nhau. Ví dụ: ký tự U + 00C7 (CHỮ VỐN LATIN C VỚI CEDILLA) cũng có thể được biểu thị dưới dạng chuỗi U + 0043 (CHỮ VỐN LATIN C) U + 0327 (KẾT HỢP CEDILLA)

Có hai hình thức bình thường cho mỗi nhân vật. dạng bình thường C và dạng bình thường D. Dạng thông thường D (NFD) còn được gọi là phân tách chính tắc và dịch từng ký tự thành dạng phân tách. Dạng C thông thường (NFC) trước tiên áp dụng phân tách chuẩn, sau đó tạo lại các ký tự được kết hợp trước

Ngoài hai dạng này còn có thêm hai dạng thông thường nữa dựa trên sự tương đương tương đương. Một số ký tự được hỗ trợ trong Unicode, thường được kết hợp với các ký tự khác. Ví dụ: U + 2160 (MỘT SỐ ROMAN) thực sự giống với U + 0049 (CHỮ VỐN LATIN I). Tuy nhiên, nó được hỗ trợ bằng Unicode để tương thích với các bộ ký tự hiện có, chẳng hạn như gb2312

Dạng thông thường KD (NFKD) sẽ áp dụng phân tách tương thích, nghĩa là thay thế tất cả các ký hiệu tương thích bằng các ký hiệu tương đương của chúng. Dạng chuẩn KC (NFKC) trước tiên áp dụng phân tách tương thích và sau đó là thành phần chính tắc

Mặc dù hai chuỗi Unicode được chuẩn hóa và trông giống với con người nếu một chuỗi có các ký tự kết hợp còn chuỗi kia thì không, chúng có thể không khớp

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

Hãy kiểm tra kiểu dữ liệu sau khi chuẩn hóa

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

Phương pháp 4. Liệt kê hiểu biết và str. tham gia

Phương thức

>>> type(A)

6 trả về một chuỗi là phép nối (union) của tất cả các phần tử của chuỗi trong iterable

Ở dòng cuối cùng, các phần tử được kết hợp với nhau bằng cách sử dụng chuỗi phân cách str

Nếu có bất kỳ giá trị không phải chuỗi nào trong chuỗi có thể lặp lại, bao gồm cả byte, thì sẽ tăng ngoại lệ TypeError

Hãy kiểm tra xem nó hoạt động như thế nào

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

>>> type(A)

7 – một ký tự chuỗi rỗng nối các phần tử của danh sách mà chúng tôi đã biên dịch từ các phần tử của chuỗi A bằng phương thức nối

Vì chúng tôi đã chỉ định bọc từng lần lặp của danh sách bằng hàm str, nên chúng tôi có thể giả định một cách an toàn rằng kết quả sẽ là kiểu dữ liệu mong muốn

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

Phương pháp 5. Thư viện ftfy

Tên đầy đủ của thư viện này là Fixes text for you. Nó được thiết kế để biến các chuỗi Unicode xấu (“quotesâ€\x9d hoặc ü) thành các chuỗi Unicode tốt (tương ứng (“quotes” hoặc ü)

Hãy xem cách nó hoạt động trong ví dụ của chúng tôi

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

Nó làm gì với kiểu dữ liệu đầu ra

>>> type(A)

0

Tuyệt vời, đó là những gì bạn cần, điều chính là thư viện vẫn có thể truy cập được;)

Phương pháp 6. mô-đun io

Mô-đun IO được áp dụng khi bạn cần thực hiện thao tác I/O trên tệp (ví dụ: đọc hoặc ghi tệp). Bạn có thể sử dụng các phương thức

>>> type(A)

8 và
>>> type(A)

9 tích hợp sẵn để đọc hoặc ghi tệp, nhưng mô-đun này cung cấp cho chúng tôi nhiều tùy chọn mã hơn cho các thao tác này, chẳng hạn như ghi hoặc đọc từ bộ đệm

Trong ví dụ đơn giản của chúng tôi, nó sẽ trông như thế này

>>> type(A)

1

print(str(A))
# Hello
0 làm việc với dữ liệu kiểu chuỗi cả ở đầu vào và đầu ra. Bất cứ khi nào một chuỗi đầu vào hoặc luồng dữ liệu bao gồm các byte hoặc ký tự Unicode, quá trình mã hóa hoặc giải mã dữ liệu được thực hiện một cách rõ ràng và việc dịch tùy chọn các dòng mới theo môi trường cụ thể sẽ được tính đến

Phương pháp 7. Sự sắp xếp

Phương pháp này có vẻ mạnh mẽ và hiệu quả nhất vì nó cho phép bạn làm việc với tất cả các loại dữ liệu. byte, chuỗi, int và số float trong các biểu diễn khác nhau (bát phân, thập phân, thập lục phân trong các thanh ghi khác nhau) bằng cách sử dụng đặc tả ngôn ngữ nhỏ, cho phép bạn chỉ định không chỉ loại dữ liệu mà còn bù, làm tròn, điền các ký tự để

Hãy kiểm tra với ví dụ của chúng tôi

>>> type(A)

2

Ở đây 's' là loại đối tượng được định dạng - chuỗi, được sử dụng theo mặc định. Thêm chi tiết về đặc tả và cú pháp tại đây

\U trong Python là gì?

Trong Python3, chuỗi mặc định được gọi là Chuỗi Unicode (chuỗi u), 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 để chuyển đổi utf8 sang Unicode trong Python?

bạn có thể sử dụng bytearray([0xc5, 0x81]). decode('utf-8') hoạt động trên cả Python 2 và 3

Bạn sẽ chuyển đổi một số nguyên thành một ký tự Unicode trong Python như thế nào?

Hàm chr() của thư viện Python chuyển đổi ký tự Unicode được liên kết với bất kỳ bộ chuyển đổi nào nằm trong khoảng từ 0 đến 0x10ffff.

Làm cách nào để sử dụng utf 8 trong Python?

UTF-8 sử dụng các quy tắc sau. .
Nếu điểm mã < 128, thì nó được biểu thị bằng giá trị byte tương ứng
Nếu điểm mã >= 128, thì nó được chuyển thành một chuỗi gồm hai, ba hoặc bốn byte, trong đó mỗi byte của chuỗi nằm trong khoảng từ 128 đến 255