Làm thế nào để bạn unicode một chuỗi trong python?

Các chuỗi Unicode có thể được mã hóa thành các chuỗi đơn giản theo nhiều cách khác nhau, tùy theo cách mã hóa bạn chọn

# Convert Unicode to plain Python string: "encode"
unicodestring = u"Hello world"
utf8string = unicodestring.encode["utf-8"]
asciistring = unicodestring.encode["ascii"]
isostring = unicodestring.encode["ISO-8859-1"]
utf16string = unicodestring.encode["utf-16"]

# Convert plain Python string to Unicode: "decode"
plainstring1 = unicode[utf8string, "utf-8"]
plainstring2 = unicode[asciistring, "ascii"]
plainstring3 = unicode[isostring, "ISO-8859-1"]
plainstring4 = unicode[utf16string, "utf-16"]

assert plainstring1==plainstring2==plainstring3==plainstring4

Nếu bạn thấy mình đang xử lý văn bản chứa các ký tự không phải ASCII, bạn phải tìm hiểu về Unicode—nó là gì, nó hoạt động như thế nào và Python sử dụng nó như thế nào

Unicode là một chủ đề lớn. May mắn thay, bạn không cần phải biết mọi thứ về Unicode để có thể giải quyết các vấn đề trong thế giới thực với nó. một vài kiến ​​thức cơ bản là đủ. Trước tiên, bạn phải hiểu sự khác biệt giữa byte và ký tự. Trong các ngôn ngữ và môi trường cũ hơn, lấy ASCII làm trung tâm, byte và ký tự được coi là giống nhau. Vì một byte có thể chứa tối đa 256 giá trị nên các môi trường này bị giới hạn ở 256 ký tự. Mặt khác, Unicode có hàng chục nghìn ký tự. Điều đó có nghĩa là mỗi ký tự Unicode chiếm nhiều hơn một byte, vì vậy bạn cần phân biệt giữa ký tự và byte

Các chuỗi Python tiêu chuẩn thực sự là các chuỗi byte và một ký tự Python thực sự là một byte. Các thuật ngữ khác cho loại Python tiêu chuẩn là “chuỗi 8 bit” và “chuỗi đơn giản. ” Trong công thức này, chúng tôi sẽ gọi chúng là các chuỗi byte, để nhắc bạn về hướng byte của chúng

Ngược lại, một ký tự Unicode trong Python là một đối tượng trừu tượng đủ lớn để chứa ký tự đó, tương tự như các số nguyên dài của Python. Bạn không phải lo lắng về đại diện nội bộ; . Khi đó, bạn phải chọn cách biểu diễn các ký tự dưới dạng byte. Chuyển đổi từ Unicode sang chuỗi byte được gọi là mã hóa chuỗi. Tương tự, khi bạn tải chuỗi Unicode từ tệp, ổ cắm hoặc đối tượng hướng byte khác, bạn cần giải mã chuỗi từ byte thành ký tự

Có nhiều cách chuyển đổi đối tượng Unicode thành chuỗi byte, mỗi cách được gọi là mã hóa. Vì nhiều lý do lịch sử, chính trị và kỹ thuật, không có một mã hóa “đúng” nào. Mọi mã hóa đều có tên không phân biệt chữ hoa chữ thường và tên đó được chuyển cho phương thức giải mã dưới dạng tham số. Dưới đây là một số bạn nên biết về

  • Mã hóa UTF-8 có thể xử lý bất kỳ ký tự Unicode nào. Nó cũng tương thích ngược với ASCII, do đó, tệp ASCII thuần túy cũng có thể được coi là tệp UTF-8 và tệp UTF-8 chỉ sử dụng các ký tự ASCII giống hệt với tệp ASCII có cùng ký tự. Thuộc tính này làm cho UTF-8 rất tương thích ngược, đặc biệt là với các công cụ Unix cũ hơn. UTF-8 là mã hóa thống trị trên Unix. Điểm yếu chính của nó là nó khá kém hiệu quả đối với các văn bản phương Đông

  • Mã hóa UTF-16 được ưa chuộng bởi hệ điều hành Microsoft và môi trường Java. Nó kém hiệu quả hơn đối với các ngôn ngữ phương Tây nhưng hiệu quả hơn đối với các ngôn ngữ phương Đông. Một biến thể của UTF-16 đôi khi được gọi là UCS-2

  • Chuỗi mã hóa ISO-8859 là siêu tập hợp ASCII 256 ký tự. Chúng không thể hỗ trợ tất cả các ký tự Unicode; . ISO-8859-1, còn được gọi là Latin-1, bao gồm hầu hết các ngôn ngữ Tây Âu và Châu Phi, trừ tiếng Ả Rập. ISO-8859-2, còn được gọi là Latin-2, bao gồm nhiều ngôn ngữ Đông Âu như tiếng Hungary và tiếng Ba Lan

Nếu bạn muốn có thể mã hóa tất cả các ký tự Unicode, có lẽ bạn muốn sử dụng UTF-8. Bạn có thể sẽ chỉ cần xử lý các mã hóa khác khi bạn được cung cấp dữ liệu trong các mã hóa đó được tạo bởi một số ứng dụng khác

“Chuỗi” trong Python? . Tuy nhiên, bạn có biết có ít nhất bốn loại chuỗi trong Python nguyên thủy không?

Ở đây, hãy để tôi cố gắng giải tỏa một số nhầm lẫn của bạn dựa trên kinh nghiệm học tập của riêng tôi. Chúng tôi sẽ đề cập đến những chủ đề này

  1. Khái niệm “Mã hóa” và “Giải mã” là gì?
  2. Chuỗi thô [r] hoặc chuỗi định dạng [f] là gì và khi nào tôi nên sử dụng chúng?
  3. Sự khác biệt giữa chuỗi Numpy/Pandas và chuỗi Python nguyên thủy là gì?

Chuỗi byte và Chuỗi Unicode [chuỗi Python3 mặc định] — Đó là tất cả về Mã hóa

Để hiểu sự khác biệt giữa chuỗi byte và chuỗi Unicode, trước tiên chúng ta cần biết “Mã hóa” và “Giải mã” là gì

Mã hóa và giải mã [Hình ảnh của tác giả]

Để lưu trữ các ký tự mà con người có thể đọc được trên máy tính, chúng ta cần mã hóa chúng thành byte. Ngược lại, chúng ta cần giải mã các byte thành các ký tự mà con người có thể đọc được để biểu diễn. Byte, trong khoa học máy tính, biểu thị đơn vị 0/1, thường có độ dài 8. Vì vậy, các ký tự “Xin chào” thực sự được lưu trữ dưới dạng “01001000 01101001” trên máy tính, tiêu tốn 2 byte [16 bit]

Quy tắc xác định quy trình mã hóa được gọi là lược đồ mã hóa, những quy tắc thường được sử dụng bao gồm “ASCII”, “UTF-8”, v.v. Bây giờ, câu hỏi là các lược đồ mã hóa này trông như thế nào?

“ASCII” chuyển đổi từng ký tự thành một byte. Vì một byte bao gồm 8 bit và mỗi bit chứa 0/1. Tổng số ký tự “ASCII” có thể đại diện là 2⁸=256. Nó là quá đủ cho 26 chữ cái tiếng Anh cộng với một số ký tự thường dùng. Xem bảng “ASCII” để biết thông tin đầy đủ

Tuy nhiên, 256 ký tự rõ ràng là không đủ để lưu trữ tất cả các ký tự trên thế giới. Trước tình hình đó, người ta đã thiết kế Unicode trong đó mỗi ký tự sẽ được mã hóa thành một “điểm mã”. Chẳng hạn, “H” sẽ được biểu thị dưới dạng điểm mã “U+0048”. Theo Wikipedia, Unicode có thể bao gồm 144.697 ký tự. Nhưng một lần nữa, máy tính vẫn không thể nhận ra điểm mã, vì vậy chúng tôi có lược đồ mã hóa “UTF-8” hoặc các biến thể khác để chuyển đổi điểm mã thành byte. “UTF-8” có nghĩa là độ dài bit tối thiểu để biểu thị một ký tự là 8, vì vậy bạn có thể đoán, “UTF-16” có nghĩa là độ dài tối thiểu của bit là 16. UTF-8 phổ biến hơn nhiều so với UTF-16, vì vậy trong bài viết này và đối với hầu hết công việc của bạn vì chúng tương thích với tiêu chuẩn ASCII gốc cũ [một ký tự có thể được biểu thị bằng một byte], hiểu UTF-8 là đủ. Xem bảng “UTF-8” để biết thông tin đầy đủ

Với các khái niệm cơ bản đã hiểu, hãy cùng tìm hiểu một số mẹo mã hóa thực tế trong Python. 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à những 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

u'Hi'.encode['ASCII']
> b'Hi'
b'\x48\x69'.decode['ASCII']
> 'Hi'

Trong Python IDE, thông thường, chuỗi byte sẽ được giải mã tự động bằng cách sử dụng “ASCII” khi được in ra, vì vậy đó là lý do tại sao kết quả đầu tiên có thể đọc được bằng con người [b’Hi']. Thường xuyên hơn, chuỗi Byte phải được biểu diễn dưới dạng mã hex [b’\x48\x69'], mã này có thể tìm thấy trong bất kỳ bảng “ASCII” nào

Để kết thúc phần này, chúng ta hãy xem một ví dụ “UTF-8”, một lần nữa mã hex cho mọi ký tự có thể được tìm thấy trong bảng UTF-8

b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
Chuỗi thô

Để bắt đầu với loại chuỗi này, chúng ta chỉ cần biết một điều về chuỗi Unicode mặc định [chuỗi u] — dấu gạch chéo ngược [“\”] là một ký tự đặc biệt trong chuỗi Unicode sao cho ký tự theo sau sẽ có ý nghĩa đặc biệt [i. e. \t, \n, v.v.]. Vì vậy, để bỏ qua ý nghĩa đặc biệt của dấu gạch chéo ngược, chúng ta có chuỗi Nguyên [chuỗi r] trong đó dấu gạch chéo ngược chỉ là dấu gạch chéo ngược và nó sẽ không có tác dụng thay đổi ý nghĩa của các ký tự theo sau nó

Chuỗi Unicode và Nguyên [Hình ảnh của Tác giả]

Đây là đề xuất cá nhân của tôi, trừ khi trong trường hợp bạn cần xác định mẫu đối sánh biểu thức chính quy [Xem ví dụ bên dưới], tôi khuyên bạn nên sử dụng chuỗi Unicode có thoát [sử dụng dấu gạch chéo ngược để bỏ qua ký tự đặc biệt]. Như được hiển thị trong ví dụ thứ ba, chúng tôi đã sử dụng dấu gạch chéo ngược để đảm bảo rằng chúng tôi xuất ra một chữ “\” thay vì một tab mới “\t”

Tại sao tôi muốn giới thiệu điều đó?

r'ttt'g''File "", line 1
r'ttt'g''
^
SyntaxError: invalid syntax

Tuy nhiên, sử dụng ý tưởng thoát cùng với chuỗi Unicode dường như là một cách tiếp cận tổng quát hơn

u'ttt\'g\''> "ttt'g'"

Nơi duy nhất mà Chuỗi thô [chuỗi r] có thể hữu ích là khi bạn đang xử lý biểu thức chính quy. Biểu thức chính quy là cả một hộp giun và tôi không có ý định đề cập đến điều đó trong bài viết này. Nhưng khi sử dụng biểu thức chính quy, trước tiên chúng ta cần xác định một mẫu phù hợp trong đó chuỗi Nguyên sẽ được đề xuất

import re
pat = re.compile[r'ENSG\d+$']
string = 'ENSG00000555'
re.search[pat,string]
Định dạng chuỗi

Đối với các lập trình viên Python có kinh nghiệm, chuỗi định dạng không phải là một khái niệm xa lạ, nó cho phép bạn cấu hình động chuỗi mà chúng ta muốn in. Trước phiên bản Python 3. 5, cách tiếp cận được đề xuất để tạo chuỗi định dạng là như vậy

var = 'hello'
print['{} world'.format[var]]
> hello world

Kể từ Python 3. 5 trở lên, có một “chuỗi f” mới để giúp chúng tôi đạt được mục tiêu tương tự

var = 'hello'
print[f'{var} world']
> hello world

Điều quan trọng mà tôi muốn lưu ý ở đây là, khi sử dụng chuỗi định dạng, dấu ngoặc nhọn “{}” trở thành một ký tự rất đặc biệt và chứa đựng ý nghĩa riêng của nó. Do đó, nếu chúng ta vẫn muốn xuất ra chữ “{}”, thì chúng ta cần thoát nó bằng cách sử dụng dấu ngoặc nhọn kép “{{}}”

________số 8_______

Ngoài ra, hãy cẩn thận với cả

b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
3 trong chuỗi định dạng [hoặc các số khác sau dấu gạch chéo ngược]

# Make sure to write the command in a python file and execute the python file
'ttt {} \1'.format['rr']
> ttt rr
'ttt {} \\1'.format['rr']
> ttt rr \1

Xin lưu ý rằng trong đoạn mã trên nơi đầu ra được tạo bằng cách chạy tệp python, nếu bạn sử dụng bảng điều khiển Python tương tác, nó sẽ gây nhầm lẫn vì đầu ra thực sự được mã hóa tự động thành byte

# if using interactive python console
'ttt {} \1'.format['rr']
> 'ttt rr \x01'
'ttt {} \\1'.format['rr']
> 'ttt rr \\1'

Cuối cùng nhưng không kém phần quan trọng, có thể thực hiện chuỗi

b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
4, trong đó chúng tôi muốn xây dựng một chuỗi thô cho biểu thức chính quy nhưng chúng tôi muốn bọc một số biến trong đó

b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
0Chuỗi trong Numpy và Pandas

Những gì chúng tôi đề cập cho đến nay là tất cả về các kiểu chuỗi nguyên thủy trong Python, chúng tôi chưa đề cập đến cách xử lý chuỗi trong các gói Python phổ biến khác. Ở đây tôi sẽ chia sẻ một chút về các loại chuỗi trong Numpy và Pandas

Trong Numpy, thông thường, String có thể được chỉ định trong ba "dtypes" khác nhau

  1. Unicode có độ dài thay đổi [U]
  2. Byte có độ dài cố định [S]
  3. Đối tượng Python [O]
b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
1

b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
5 có nghĩa là chuỗi dài nhất là chuỗi có độ dài 5, tuy nhiên, một cách tiết kiệm bộ nhớ hơn là sử dụng
b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
6 có độ dài cố định, về cơ bản chuyển đổi chúng thành chuỗi byte. Đây là cách ưa thích nếu bạn đang cố gắng chuyển đổi nó sang cấu trúc dữ liệu kiểu mạnh [tôi. e. lưu trữ dưới dạng tệp h5]. Ngoài ra, chúng ta có thể coi các chuỗi là các đối tượng Python và lưu trữ chúng trong mảng Numpy, vì mọi đối tượng Python đều có thể được lưu trữ trong mảng Numpy bằng cách sử dụng kiểu “đối tượng”.

Chuỗi trong gấu trúc có thể được biểu diễn theo hai cách

  1. đối tượng dtype [hầu hết thời gian sẽ ổn thôi]
  2. chuỗi dtype
b'\xe0\xb0\x86'.decode['utf-8']
> 'ఆ'
2

Hai loại này nói chung là tương tự nhau, sự khác biệt tinh tế được nêu trong

Phần kết luận

Tóm lại, chúng ta đã nói về các cách biểu diễn khác nhau của “chuỗi” trong Python. Bắt đầu với chuỗi Unicode mặc định [chuỗi u], chúng tôi đã chạm vào cách nó liên quan đến chuỗi Byte [chuỗi b]. Hiểu chuyển đổi là rất quan trọng vì đôi khi đầu ra tiêu chuẩn từ các chương trình khác sẽ ở định dạng byte và trước tiên chúng ta cần giải mã chúng thành chuỗi Unicode để tiếp tục hoạt động Truyền phát. Sau đó chúng ta nói về Chuỗi thô [chuỗi r] và Chuỗi định dạng [chuỗi f] và những lưu ý chúng ta cần chú ý khi sử dụng chúng. Cuối cùng, chúng tôi đã tóm tắt các cách biểu diễn chuỗi khác nhau trong Numpy và Pandas, và cần đặc biệt cẩn thận khi khởi tạo các đối tượng Numpy hoặc Pandas bằng chuỗi vì các hành vi sẽ khác nhiều so với các chuỗi Python nguyên thủy

Đó là về nó. Tôi hy vọng bạn thấy bài viết này thú vị và hữu ích, cảm ơn vì đã đọc. Nếu bạn thích bài viết này, hãy theo dõi tôi trên phương tiện, cảm ơn bạn rất nhiều vì đã ủng hộ. Kết nối với tôi trên Twitter hoặc LinkedIn của tôi, đồng thời vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi nào hoặc loại hướng dẫn nào bạn muốn xem trong tương lai

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

Cho một Chuỗi, hãy chuyển các ký tự của nó thành ký tự unicode. .
Đầu vào. test_str = 'gfg'
đầu ra. \u0067\u0066\u0067
Giải trình. Kết quả đổi thành chuỗi unicode
Đầu vào. test_str = 'himani'
đầu ra. \u0068\u0069\u006D\u0061\u006E\u0069
Giải trình. Kết quả đổi thành chuỗi unicode

\u trong một chuỗi là gì?

U trong u'Some String' nghĩa là chuỗi của bạn là chuỗi Unicode .

Cái gì được sử dụng để tạo chuỗi Unicode trong Python?

UTF-8 là một trong những bảng mã được sử dụng phổ biến nhất và Python thường mặc định sử dụng nó. UTF là viết tắt của “Định dạng chuyển đổi Unicode” và '8' có nghĩa là các giá trị 8 bit được sử dụng trong mã hóa.

Chủ Đề