Hướng dẫn is python unicode or ascii? - python là unicode hay ascii?

Hãy cùng tham gia một chuyến tham quan về các khái niệm thiết yếu về các chuỗi sẽ đưa sự hiểu biết của bạn lên một tầm cao mới.

Chuỗi là một trong những loại dữ liệu phổ biến nhất trong Python. Chúng được sử dụng để đối phó với dữ liệu văn bản dưới bất kỳ hình thức nào. Lĩnh vực xử lý ngôn ngữ tự nhiên được xây dựng trên đầu văn bản và xử lý chuỗi của một số loại. Điều quan trọng là phải biết về cách các chuỗi hoạt động trong Python. Các chuỗi thường dễ dàng đối phó khi chúng được tạo thành từ các nhân vật ASCII tiếng Anh, nhưng các vấn đề của Hồi giáo xuất hiện khi chúng ta tham gia vào các ký tự không phải ASCII-ngày càng trở nên phổ biến trên thế giới ngày nay. với sự ra đời của biểu tượng cảm xúc, v.v.

Hướng dẫn is python unicode or ascii? - python là unicode hay ascii?

Hãy để giải mã những gì ẩn trong chuỗi

Nhiều lập trình viên sử dụng encodedecode với các chuỗi với hy vọng loại bỏ UnicodeDecodeError đáng sợ - hy vọng, blog này sẽ giúp bạn vượt qua nỗi sợ hãi khi xử lý các chuỗi. Dưới đây tôi sẽ có một định dạng Q và một định dạng để thực sự nhận được câu trả lời cho các câu hỏi bạn có thể có, và tôi cũng có trước khi tôi bắt đầu tìm hiểu về chuỗi.

1. Chuỗi được làm bằng gì?

Trong Python (2 hoặc 3), các chuỗi có thể được biểu diễn bằng các điểm mã byte hoặc unicode. Byte là một đơn vị thông tin được xây dựng bằng 8 bit - byte được sử dụng để lưu trữ tất cả các tệp trong đĩa cứng. Vì vậy, tất cả các tệp CSV và JSON trên máy tính của bạn đều được xây dựng từ byte. Tất cả chúng ta đều có thể đồng ý rằng chúng ta cần byte, nhưng sau đó những điểm mã Unicode thì sao? Chúng tôi sẽ nhận được họ trong câu hỏi tiếp theo.bytes or unicode code points.
Byte is a unit of information that is built of 8 bits — bytes are used to store all files in a hard disk. So all of the CSVs and JSON files on your computer are built of bytes. We can all agree that we need bytes, but then what about unicode code points?
We will get to them in the next question.

2. Unicode và các điểm mã Unicode là gì?

Trong khi đọc byte từ một tệp, một người đọc cần biết những byte đó có nghĩa là gì. Vì vậy, nếu bạn viết một tệp JSON và gửi nó cho bạn của bạn, bạn của bạn sẽ cần biết cách xử lý các byte trong tệp JSON của bạn. Trong 20 năm đầu tiên của các ký tự tiếng Anh, trên và chữ thường, một số dấu chấm câu và chữ số là đủ. Tất cả đều được mã hóa thành một danh sách biểu tượng 127 gọi là ASCII. 7 bit thông tin hoặc 1 byte là đủ để mã hóa mọi ký tự tiếng Anh. Bạn có thể bảo bạn của bạn giải mã tệp JSON của bạn trong mã hóa ASCII và Voila - cô ấy sẽ có thể đọc những gì bạn đã gửi cho cô ấy.

Điều này thật tuyệt trong vài thập kỷ hoặc lâu hơn, nhưng chúng tôi nhận ra rằng có nhiều nhân vật hơn là chỉ các ký tự tiếng Anh. Chúng tôi đã thử mở rộng 127 ký tự lên 256 ký tự (thông qua Latin-1 hoặc ISO-8859 Tiết1) để sử dụng đầy đủ không gian 8 bit-nhưng điều đó là không đủ. Chúng tôi cần một tiêu chuẩn quốc tế mà tất cả chúng tôi đều đồng ý đối phó với hàng trăm và hàng ngàn nhân vật không phải tiếng Anh.

Trong Unicode đến!

Unicode là tiêu chuẩn quốc tế nơi ánh xạ các ký tự riêng lẻ và một số duy nhất được duy trì. Tính đến tháng 5 năm 2019, phiên bản gần đây nhất của Unicode là 12.1 chứa hơn 137K ký tự bao gồm các tập lệnh khác nhau bao gồm tiếng Anh, tiếng Hindi, tiếng Trung và tiếng Nhật, cũng như biểu tượng cảm xúc. Các ký tự 137K này được thể hiện bằng một điểm mã Unicode. Vì vậy, các điểm mã Unicode đề cập đến các ký tự thực tế được hiển thị. Các điểm mã này được mã hóa thành byte và được giải mã từ byte trở lại các điểm mã. Ví dụ: Điểm mã Unicode cho bảng chữ cái a là U+0061, Emoji 🖐 là U+1F590 và đối với ω là U+03A9.international standard where a mapping of individual characters and a unique number is maintained. As of May 2019, the most recent version of Unicode is 12.1 which contains over 137k characters including different scripts including English, Hindi, Chinese and Japanese, as well as emojis. These 137k characters are each represented by a unicode code point. So unicode code points refer to actual characters that are displayed.
These code points are encoded to bytes and decoded from bytes back to code points. Examples: Unicode code point for alphabet a is U+0061, emoji 🖐 is U+1F590, and for Ω is U+03A9.

3 trong số các tiêu chuẩn mã hóa phổ biến nhất được xác định bởi Unicode là UTF-8, UTF-16 và UTF-32.

3. Mã hóa Unicode UTF-8, UTF-16 và UTF-32 là gì?

Bây giờ chúng ta biết rằng Unicode là một tiêu chuẩn quốc tế mã hóa mọi ký tự đã biết thành một số duy nhất. Sau đó, câu hỏi tiếp theo là làm thế nào để chúng ta di chuyển những con số duy nhất này trên internet? Bạn đã biết câu trả lời rồi! Sử dụng byte thông tin.

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. Trong Python 2, mã hóa mặc định là ASCII (thật không may).It uses 1, 2, 3 or 4 bytes to encode every code point. It is backwards compatible with ASCII. All English characters just need 1 byte — which is quite efficient. We only need more bytes if we are sending non-English characters.
It is the most popular form of encoding, and is by default the encoding in Python 3. In Python 2, the default encoding is ASCII (unfortunately).

UTF-16 là biến 2 hoặc 4 byte. Mã hóa này là tuyệt vời cho văn bản châu Á vì hầu hết có thể được mã hóa thành 2 byte mỗi byte. Nó rất tệ cho tiếng Anh vì tất cả các nhân vật tiếng Anh cũng cần 2 byte ở đây. is variable 2 or 4 bytes. This encoding is great for Asian text as most of it can be encoded in 2 bytes each. It’s bad for English as all English characters also need 2 bytes here.

UTF-32 được cố định 4 byte. Tất cả các ký tự được mã hóa trong 4 byte nên nó cần rất nhiều bộ nhớ. Nó không được sử dụng thường xuyên. [Bạn có thể đọc thêm trong bài viết StackOverflow này.] is fixed 4 bytes. All characters are encoded in 4 bytes so it needs a lot of memory. It is not used very often.
[You can read more in this StackOverflow post.]

Chúng ta cần phương thức encode để chuyển đổi mã unicode thành byte. Điều này sẽ xảy ra điển hình trong quá trình ghi dữ liệu chuỗi vào tệp CSV hoặc JSON chẳng hạn. Chúng ta cần phương thức decode để chuyển đổi byte sang các điểm mã Unicode. Điều này thường sẽ xảy ra trong khi đọc dữ liệu từ một tệp vào chuỗi.
We need decode method to convert bytes to unicode code points. This will typically happen during reading data from a file into strings.

Hướng dẫn is python unicode or ascii? - python là unicode hay ascii?

Tại sao các phương thức mã hóa và giải mã cần thiết?

4. Những loại dữ liệu nào trong Python xử lý các điểm và byte của Unicode?

Như chúng ta đã thảo luận trước đó, trong Python, các chuỗi có thể được biểu diễn bằng các điểm mã byte hoặc unicode. Các điểm chính trong Python là: 1. Python 2 sử dụng loại str để lưu trữ byte và loại unicode để lưu trữ các điểm mã Unicode. Tất cả các chuỗi theo mặc định là loại ____10 - đó là byte ~ và mã hóa mặc định là ASCII. Vì vậy, nếu một tệp đến là các ký tự cyrillic, Python 2 có thể thất bại vì ASCII sẽ không thể xử lý các ký tự cyrillic đó. Trong trường hợp này, chúng ta cần nhớ sử dụng

# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
1 trong khi đọc các tệp. Điều này là bất tiện. 2. Python 3 đã đến và sửa lỗi này. Chuỗi vẫn là loại theo mặc định nhưng giờ đây chúng có nghĩa là các điểm mã Unicode - chúng tôi mang theo những gì chúng tôi thấy. Nếu chúng tôi muốn lưu trữ các chuỗi loại
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
0 này trong các tệp, chúng tôi sẽ sử dụng loại
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
4 thay thế. Mã hóa mặc định là UTF-8 thay vì ASCII. Hoàn hảo!
The main takeaways in Python are:
1. Python 2 uses str type to store bytes and unicode type to store unicode code points. All strings by default are
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
0 type — which is bytes~ And Default encoding is ASCII. So if an incoming file is Cyrillic characters, Python 2 might fail because ASCII will not be able to handle those Cyrillic Characters. In this case, we need to remember to use
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
1 during reading of files. This is inconvenient.
2. Python 3 came and fixed this. Strings are stillstr type by default but they now mean unicode code points instead — we carry what we see. If we want to store these
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
0 type strings in files we use
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
4 type instead. Default encoding is UTF-8 instead of ASCII. Perfect!

5. Bất kỳ ví dụ mã nào để so sánh các loại dữ liệu khác nhau?

Vâng, hãy để Lôi nhìn vào 你 好 好, đó là tiếng Trung cho xin chào. Phải mất 6 byte để lưu trữ chuỗi này được làm bằng 2 điểm mã Unicode. Hãy cùng lấy ví dụ về chức năng phổ biến để xem mọi thứ có thể khác nhau như thế nào trong Python 2 và 3 - và những điều bạn cần lưu ý.

>>> print(len(“你好”))   # Python 2 - str is bytes
6
>>> print(len(u“你好”)) # Python 2 - Add 'u' for unicode code points
2
>>> print(len(“你好”)) # Python 3 - str is unicode code points
2

Vì vậy, tiền tố

# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
6 trong Python 2 có thể tạo ra sự khác biệt hoàn toàn cho mã của bạn hoạt động chính xác hoặc không - có thể gây nhầm lẫn! Python 3 đã sửa lỗi này bằng cách sử dụng các điểm mã Unicode theo mặc định - vì vậy
# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'
5 sẽ hoạt động như bạn mong đợi cho độ dài 2 trong ví dụ trên.

Hãy cùng xem xét nhiều ví dụ hơn trong Python 3 để xử lý các chuỗi:

# strings is by default made of unicode code points
>>> print(len(“你好”))
2
# Manually encode a string into bytes
>>> print(len(("你好").encode("utf-8")))
6
# You don't need to pass an argument as default encoding is "utf-8"
>>> print(len(("你好").encode()))
6
# Print actual unicode code points instead of characters [Source]
>>> print(("你好").encode("unicode_escape"))
b'\\u4f60\\u597d'
# Print bytes encoded in UTF-8 for this string
>>> print(("你好").encode())
b'\xe4\xbd\xa0\xe5\xa5\xbd'

6. Nó rất nhiều thông tin! Bạn có thể tóm tắt?

Chắc chắn rồi! Hãy cùng xem tất cả những gì chúng ta đã đề cập đến nay. Theo mặc định trong Python 3, chúng ta ở bên trái trong thế giới của các điểm mã Unicode cho các chuỗi. Chúng tôi chỉ cần quay qua lại với các byte trong khi viết hoặc đọc dữ liệu. Mã hóa mặc định trong quá trình chuyển đổi này là UTF-8, nhưng các mã hóa khác cũng có thể được sử dụng. Chúng ta cần biết bộ mã hóa nào đã được sử dụng trong quá trình giải mã, nếu không chúng ta có thể nhận được lỗi hoặc nhận được vô nghĩa!
By default in Python 3, we are on the left side in the world of Unicode code points for strings. We only need to go back and forth with bytes while writing or reading the data. Default encoding during this conversion is UTF-8, but other encodings can also be used. We need to know what encoder was used during the decoding process, otherwise we might get errors or get gibberish!

Hướng dẫn is python unicode or ascii? - python là unicode hay ascii?

Sơ đồ trực quan về cách mã hóa và giải mã hoạt động cho các chuỗi

Biểu đồ này đúng với cả Python 2 và Python 3! Chúng tôi có thể nhận được ____18 do: 1) Chúng tôi đang cố gắng sử dụng ASCII để mã hóa các ký tự không phải ASCII. Điều này sẽ xảy ra đặc biệt. Trong Python 2 trong đó bộ mã hóa mặc định là ASCII. Vì vậy, bạn nên mã hóa rõ ràng và giải mã byte bằng UTF-8.2) Chúng tôi có thể sử dụng bộ giải mã sai hoàn toàn. Nếu các điểm mã Unicode được mã hóa trong UTF-16 thay vì UTF-8, bạn có thể gặp phải các byte đang vô nghĩa ở vùng đất UTF-8. Vì vậy, bộ giải mã UTF-8 có thể thất bại hoàn toàn để hiểu các byte.
1) We trying to use ASCII to encode non-ASCII characters. This would happen esp. in Python 2 where default encoder is ASCII. So you should explicitly encode and decode bytes using UTF-8.
2) We might be using the wrong decoder completely. If unicode code points were encoded in UTF-16 instead of UTF-8, you might run into bytes that are gibberish in UTF-8 land. So UTF-8 decoder might fail completely to understand the bytes.

Một thực tế tốt là giải mã byte của bạn trong UTF-8 (hoặc bộ mã hóa được sử dụng để tạo các byte đó) ngay khi chúng được tải từ một tệp. Chạy xử lý của bạn trên các điểm mã Unicode thông qua mã Python của bạn, sau đó ghi lại vào byte vào một tệp sử dụng bộ mã hóa UTF-8 cuối cùng. Đây được gọi là bánh sandwich Unicode. Đọc/xem bài nói chuyện tuyệt vời của Ned Batchelder (@NedBat) về điều này.

Nếu bạn muốn thêm thông tin về các chuỗi trong Python, vui lòng đề cập đến trong các ý kiến ​​dưới đây vì nó sẽ giúp người khác. Điều này kết thúc blog của tôi về Hướng dẫn về Unicode, UTF-8 và chuỗi. Chúc may mắn trong khám phá của riêng bạn với văn bản!

Tái bút, kiểm tra podcast mới của tôi! Nó có tên là The Data Life Podcast, nơi tôi nói về các chủ đề tương tự. Trong một tập gần đây, tôi đã nói về lý do tại sao Pandas là Excel mới. Bạn có thể nghe podcast ở đây hoặc bất cứ nơi nào bạn nghe podcast của bạn.It’s called “The Data Life Podcast” where I talk about similar topics. In a recent episode I talked about Why Pandas is the new Excel. You can listen to the podcast here or wherever you listen to your podcasts.

Hướng dẫn is python unicode or ascii? - python là unicode hay ascii?

Podcast của tôi: Podcast Data Life

Nếu bạn có bất kỳ câu hỏi nào, hãy gửi cho tôi một ghi chú tại hồ sơ LinkedIn của tôi. Cảm ơn vì đã đọc!

Python có sử dụng ASCII hay Unicode không?

1. Python 2 sử dụng loại STR để lưu trữ byte và loại unicode để lưu trữ các điểm mã Unicode.Tất cả các chuỗi theo mặc định là loại str - đó là byte ~ và mã hóa mặc định là ASCII.Python 2 uses str type to store bytes and unicode type to store unicode code points. All strings by default are str type — which is bytes~ And Default encoding is ASCII.

Python có sử dụng mã ASCII không?

Mã ASCII cũng được sử dụng để đại diện cho các ký tự như Tab, Form Feed, Trở lại vận chuyển và một số ký hiệu.Phương thức ASCII () trong Python trả về một chuỗi chứa một biểu diễn có thể in của một đối tượng cho các ký tự không phải là alphabets hoặc vô hình như tab, return vận chuyển, thức ăn mẫu, v.v.The ascii() method in Python returns a string containing a printable representation of an object for non-alphabets or invisible characters such as tab, carriage return, form feed, etc.

Loại unicode trong Python là gì?

Unicode còn được gọi là bộ ký tự phổ quát.ASCII sử dụng 8 bit (1 byte) để thể hiện một ký tự và có thể có tối đa 256 (2^8) kết hợp riêng biệt.Vấn đề với ASCII là nó chỉ có thể hỗ trợ ngôn ngữ tiếng Anh nhưng nếu chúng ta muốn sử dụng một ngôn ngữ khác như tiếng Hindi, tiếng Nga, tiếng Trung, v.v.Universal Character set. ASCII uses 8 bits(1 byte) to represents a character and can have a maximum of 256 (2^8) distinct combinations. The issue with the ASCII is that it can only support the English language but what if we want to use another language like Hindi, Russian, Chinese, etc.

Python có phải là UTF không

Theo mặc định, Python sử dụng mã hóa UTF-8..