Giải mã Python \n

Bạn có một chuỗi rất dài hoặc một chuỗi bao gồm các ký tự thoát dòng mới [\n]. Bạn muốn sử dụng Python 3 để tự động xóa các dòng mới được thêm vào đó khỏi chuỗi, danh sách hoặc tệp của bạn

Tách dòng mới/ngắt dòng khỏi chuỗi Python

Trong bài đăng này, chúng tôi sẽ phác thảo ba phương pháp mà bạn có thể sử dụng để xóa các dòng mới khỏi một chuỗi. Chúng tôi sẽ thảo luận về từng kỹ thuật và đăng mã ví dụ cho từng trường hợp

Sử dụng phương thức dải[]

Hàm strip[] trong Python xóa mọi ký tự theo sau ở đầu và cuối chuỗi. Vì vậy, nếu các đường gạch chéo của bạn nằm trước hoặc sau chuỗi, bạn có thể sử dụng dải [] để loại bỏ chúng

Mã số

mystring = '\nThis is my string. \n'
print["With newlines:" + mystring]
print["After deleting the newlines:",mystring.strip[]]

đầu ra

With newlines:
This is my string. 

After deleting the newlines: This is my string.

Sử dụng phương thức thay thế[]

Nếu bạn có một chuỗi chứa nhiều ngắt dòng, bạn có thể sử dụng phương thức thay thế và xóa/thay thế nhiều dòng mới

Mã số

mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]

đầu ra

With line breaks:This is my string 
This comes in the next line.
After deleting line breaks: This is my string This comes in the next line.

Sử dụng phương thức splitlines[]

Phương thức splitlines[] giúp chuyển các dòng thành danh sách chia nhỏ. Do đó, chúng ta có thể tách chuỗi của mình thành một danh sách và sau đó nối nó để tạo thành một giá trị chuỗi

Mã số

mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting new lines:",''.join[mystring.splitlines[]]]

đầu ra

With line breaks:This is my string 
This comes in the next line.
After deleting new lines: This is my string This comes in the next line.

Thay thế ngắt dòng bằng dấu cách

Một trường hợp phổ biến khác là đặt các khoảng trống thay vì các dòng mới trong một chuỗi. Hãy xem một ví dụ đơn giản

my_str = 'This is a string that\ni read from a file\n'
print[my_str]

Điều này sẽ trả lại như sau

This is a string that
i read from a file

Hãy thay thế ngắt dòng bằng khoảng trắng và in kết quả

________số 8

Điều này sẽ trở lại

This is a string that i read from a file 

Xóa dòng mới khỏi danh sách Python

Theo cách tương tự, bạn có thể dễ dàng loại bỏ các dòng mới khỏi danh sách các chuỗi

Giả sử bạn có danh sách sau

With newlines:
This is my string. 

After deleting the newlines: This is my string.
0

Chúng ta có thể dễ dàng loại bỏ các dòng mới khỏi các phần tử danh sách bằng cách hiểu danh sách và hàm rstrip[]

With newlines:
This is my string. 

After deleting the newlines: This is my string.
1

Đây là kết quả

With newlines:
This is my string. 

After deleting the newlines: This is my string.
2

Ngoài ra, chúng ta có thể thu được kết quả tương tự bằng cách sử dụng hàm replace[]

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3

Chúng ta cũng có thể thay thế các ký tự xuống dòng bằng một khoảng trắng

With newlines:
This is my string. 

After deleting the newlines: This is my string.
4

Xóa ngắt dòng khỏi tệp

Chủ đề cuối cùng của hướng dẫn này là xóa dòng mới khỏi nội dung của tệp văn bản

Chúng tôi biết cách đọc tệp văn bản vào danh sách Python bằng readlines[]. Trong trường hợp này, chúng ta cần một cách tiếp cận hơi khác. Trước tiên, chúng tôi muốn đọc nội dung của tệp văn bản thành một chuỗi. Điều này có thể dễ dàng thực hiện bằng hàm read[] đối tượng tệp. Sau đó, chúng ta có thể thao tác chuỗi khi cần, trong trường hợp này thay thế các ký tự xuống dòng bằng khoảng trắng

Xử lý mã hóa ký tự trong Python hoặc bất kỳ ngôn ngữ nào khác đôi khi có vẻ khó khăn. Những nơi như Stack Overflow có hàng nghìn câu hỏi bắt nguồn từ sự nhầm lẫn về các ngoại lệ như

With newlines:
This is my string. 

After deleting the newlines: This is my string.
56 và
With newlines:
This is my string. 

After deleting the newlines: This is my string.
57. Hướng dẫn này được thiết kế để xóa sương mù
With newlines:
This is my string. 

After deleting the newlines: This is my string.
58 và minh họa rằng làm việc với dữ liệu văn bản và nhị phân trong Python 3 có thể là một trải nghiệm suôn sẻ. Hỗ trợ Unicode của Python rất mạnh mẽ và mạnh mẽ, nhưng phải mất một thời gian để thành thạo

Hướng dẫn này khác biệt bởi vì nó không phải là ngôn ngữ bất khả tri mà thay vào đó, có chủ ý lấy Python làm trung tâm. Bạn vẫn sẽ nhận được phần mở đầu không liên quan đến ngôn ngữ, nhưng sau đó, bạn sẽ đi sâu vào các hình minh họa bằng Python, với các đoạn văn bản nặng được giữ ở mức tối thiểu. Bạn sẽ thấy cách sử dụng các khái niệm mã hóa ký tự trong mã Python trực tiếp

Đến cuối hướng dẫn này, bạn sẽ

  • Nhận tổng quan khái niệm về mã hóa ký tự và hệ thống đánh số
  • Hiểu cách mã hóa phát huy tác dụng với
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    90 của Python
  • Biết về hỗ trợ trong Python cho các hệ thống đánh số thông qua các dạng khác nhau của
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    91 chữ
  • Làm quen với các hàm tích hợp sẵn của Python liên quan đến mã hóa ký tự và hệ thống đánh số

Các hệ thống đánh số và mã hóa ký tự được kết nối chặt chẽ với nhau đến mức chúng cần được đề cập trong cùng một hướng dẫn, nếu không việc xử lý một trong hai sẽ hoàn toàn không thỏa đáng

Ghi chú. Bài viết này là Python 3 trung tâm. Cụ thể, tất cả các ví dụ về mã trong hướng dẫn này được tạo từ một CPython 3. 7. 2 shell, mặc dù tất cả các phiên bản nhỏ của Python 3 sẽ hoạt động [hầu hết] giống nhau trong cách xử lý văn bản của chúng

Nếu bạn vẫn đang sử dụng Python 2 và bị đe dọa bởi sự khác biệt trong cách Python 2 và Python 3 xử lý dữ liệu văn bản và dữ liệu nhị phân, thì hy vọng hướng dẫn này sẽ giúp bạn thực hiện chuyển đổi

Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn

Mã hóa ký tự là gì?

Có hàng chục nếu không muốn nói là hàng trăm mã hóa ký tự. Cách tốt nhất để bắt đầu hiểu chúng là gì là bao gồm một trong những bảng mã ký tự đơn giản nhất, ASCII

Cho dù bạn là người tự học hay có kiến ​​thức cơ bản về khoa học máy tính, rất có thể bạn đã nhìn thấy bảng ASCII một hoặc hai lần. ASCII là một nơi tốt để bắt đầu tìm hiểu về mã hóa ký tự vì đây là một mã hóa nhỏ và có chứa. [Quá nhỏ, hóa ra. ]

Nó bao gồm những điều sau đây

  • Chữ thường tiếng Anh. từ a đến z
  • Các chữ cái tiếng Anh viết hoa. A đến Z
  • Một số dấu câu và kí hiệu.
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    92 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    93, để đặt tên cho một cặp vợ chồng
  • Ký tự khoảng trắng. một không gian thực tế [
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    94], cũng như một dòng mới, xuống dòng, tab ngang, tab dọc và một vài thứ khác
  • Một số ký tự không in được. các ký tự như xóa lùi,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    95, không thể được in theo nghĩa đen theo cách mà chữ A có thể

Vì vậy, một định nghĩa chính thức hơn về mã hóa ký tự là gì?

Ở cấp độ rất cao, đó là cách dịch các ký tự [chẳng hạn như chữ cái, dấu chấm câu, ký hiệu, khoảng trắng và ký tự điều khiển] sang số nguyên và cuối cùng là bit. Mỗi ký tự có thể được mã hóa thành một chuỗi bit duy nhất. Đừng lo lắng nếu bạn không nắm vững khái niệm về bit, vì chúng ta sẽ sớm tìm hiểu về chúng

Các danh mục khác nhau được phác thảo đại diện cho các nhóm ký tự. Mỗi ký tự đơn có một điểm mã tương ứng mà bạn có thể coi như một số nguyên. Các ký tự được phân đoạn thành các phạm vi khác nhau trong bảng ASCII

Phạm vi điểm mã Lớp từ 0 đến 31Ký tự điều khiển/không in được32 đến 64Dấu câu, ký hiệu, số và khoảng cách65 đến 90Các chữ cái trong bảng chữ cái tiếng Anh viết hoa91 đến 96Các biểu đồ bổ sung, chẳng hạn như

With newlines:
This is my string. 

After deleting the newlines: This is my string.
96 và
With newlines:
This is my string. 

After deleting the newlines: This is my string.
9797 đến 122Các chữ cái trong bảng chữ cái tiếng Anh viết thường123 đến 126Các biểu đồ bổ sung, chẳng hạn như
With newlines:
This is my string. 

After deleting the newlines: This is my string.
98 và

Toàn bộ bảng ASCII chứa 128 ký tự. Bảng này nắm bắt bộ ký tự hoàn chỉnh mà ASCII cho phép. Nếu bạn không thấy một ký tự ở đây, thì đơn giản là bạn không thể diễn đạt ký tự đó dưới dạng văn bản in theo sơ đồ mã hóa ASCII

Bảng ASCIIHiển thị/Ẩn

Ký tự điểm mã [Tên]Ký tự điểm mã [Tên]0NUL [Không]64

mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
911SOH [Bắt đầu tiêu đề]65
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
922STX [Bắt đầu văn bản]66
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
933ETX [Kết thúc văn bản]67
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
944EOT [Kết thúc truyền]68
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
955ENQ [Truy vấn]69
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
966ACK [Xác nhận]70
mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
977BEL [Chuông]

Loại bỏ các quảng cáo

Mô-đun
This is a string that
i read from a file
945

Mô-đun

This is a string that
i read from a file
945 của Python là một điểm dừng thuận tiện cho các hằng chuỗi nằm trong bộ ký tự của ASCII

Đây là cốt lõi của mô-đun trong tất cả vinh quang của nó

With newlines:
This is my string. 

After deleting the newlines: This is my string.
26

Hầu hết các hằng số này phải tự ghi lại tên định danh của chúng. Chúng tôi sẽ sớm đề cập đến những gì

This is a string that
i read from a file
947 và
This is a string that
i read from a file
948

Bạn có thể sử dụng các hằng số này để thao tác chuỗi hàng ngày

>>>

This is a string that
i read from a file
9

Ghi chú.

This is a string that
i read from a file
949 bao gồm tất cả
This is a string that
i read from a file
950. Điều này hơi khác với một phương pháp khác để kiểm tra xem một ký tự có được coi là có thể in được hay không, cụ thể là
This is a string that
i read from a file
951, phương pháp này sẽ cho bạn biết rằng không có ký tự nào trong số
This is a string that
i read from a file
952 được coi là có thể in được

Sự khác biệt tinh tế là do định nghĩa.

This is a string that
i read from a file
951 coi thứ gì đó có thể in được nếu “tất cả các ký tự của nó được coi là có thể in được trong
This is a string that
i read from a file
954. ”

Một chút bồi dưỡng

Bây giờ là thời điểm tốt để ôn lại một chút, đơn vị thông tin cơ bản nhất mà máy tính biết

Một bit là tín hiệu chỉ có hai trạng thái có thể. Có nhiều cách khác nhau để biểu diễn một cách tượng trưng một chút mà tất cả đều có nghĩa giống nhau

  • 0 hoặc 1
  • "có hay không"
  • This is a string that
    i read from a file
    955 hoặc
    This is a string that
    i read from a file
    956
  • "bật hoặc tắt"

Bảng ASCII của chúng tôi từ phần trước sử dụng những gì bạn và tôi sẽ gọi là các số [0 đến 127], nhưng những gì được gọi chính xác hơn là các số trong cơ số 10 [thập phân]

Bạn cũng có thể biểu thị từng số trong số cơ số 10 này bằng một chuỗi bit [cơ số 2]. Dưới đây là các phiên bản nhị phân từ 0 đến 10 ở dạng thập phân

Thập phân Nhị phân [Nhỏ gọn]Nhị phân [Dạng đệm]00000000001100000001210000000103110000001141000000010051010000010161100000011071110000011181000000010009010010101010101010101010101010101010101010101010101010101010101010101

Lưu ý rằng khi số thập phân n tăng lên, bạn cần nhiều bit quan trọng hơn để biểu thị ký tự được thiết lập và bao gồm cả số đó

Đây là một cách tiện dụng để biểu diễn các chuỗi ASCII dưới dạng các chuỗi bit trong Python. Mỗi ký tự từ chuỗi ASCII được mã hóa giả thành 8 bit, với các khoảng trắng ở giữa các chuỗi 8 bit, mỗi ký tự đại diện cho một ký tự

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
38

Ghi chú.

This is a string that
i read from a file
957 đã được giới thiệu trong Python 3. 7

Chuỗi f

This is a string that
i read from a file
958 sử dụng Python, đây là cách chỉ định định dạng cho các trường thay thế trong chuỗi định dạng

  • Phía bên trái của dấu hai chấm,

    This is a string that
    i read from a file
    959, là đối tượng thực có giá trị sẽ được định dạng và chèn vào đầu ra. Sử dụng hàm Python
    This is a string that
    i read from a file
    960 cung cấp cho bạn điểm mã cơ sở 10 cho một ký tự
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59

  • Phía bên tay phải của dấu hai chấm là định dạng định dạng.

    This is a string that
    i read from a file
    962 có nghĩa là chiều rộng 8, đệm 0 và chức năng
    With line breaks:This is my string 
    This comes in the next line.
    After deleting new lines: This is my string This comes in the next line.
    97 như một dấu hiệu để xuất số kết quả trong cơ số 2 [nhị phân]

Thủ thuật này chủ yếu chỉ để giải trí và nó sẽ thất bại nặng nề đối với bất kỳ ký tự nào mà bạn không thấy có trong bảng ASCII. Chúng ta sẽ thảo luận về cách mã hóa khác khắc phục sự cố này sau

Loại bỏ các quảng cáo

Chúng tôi cần thêm bit

Có một công thức cực kỳ quan trọng liên quan đến định nghĩa của một bit. Cho một số bit, n, số lượng các giá trị riêng biệt có thể có có thể được biểu diễn trong n bit là 2n

With newlines:
This is my string. 

After deleting the newlines: This is my string.
5

Đây là ý nghĩa của nó

  • 1 bit sẽ cho phép bạn thể hiện 21 == 2 giá trị có thể
  • 8 bit sẽ cho phép bạn thể hiện 28 == 256 giá trị có thể
  • 64 bit sẽ cho phép bạn thể hiện 264 == 18.446.744.073.709.551.616 giá trị có thể

Có một hệ quả tất yếu cho công thức này. được cung cấp một phạm vi các giá trị riêng biệt có thể, làm thế nào chúng ta có thể tìm thấy số bit, n, cần thiết để phạm vi được biểu diễn đầy đủ?

Đây là những gì hiệu quả

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
9

Lý do bạn cần sử dụng mức trần trong

This is a string that
i read from a file
964 là để tính đến các giá trị không phải là lũy thừa sạch của 2. Giả sử bạn cần lưu trữ một bộ ký tự gồm 110 ký tự. Ngây thơ, điều này sẽ mất _______7965 bit, nhưng không có thứ gọi là 0. 781 bit. 110 giá trị sẽ yêu cầu 7 bit, không phải 6, với các vị trí cuối cùng là không cần thiết

>>>

mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting line breaks:",mystring.replace['\n','']]
9

Tất cả điều này phục vụ để chứng minh một khái niệm. Nói đúng ra, ASCII là mã 7 bit. Bảng ASCII mà bạn đã thấy ở trên chứa 128 điểm mã và ký tự, bao gồm từ 0 đến 127. Điều này yêu cầu 7 bit

>>>

With line breaks:This is my string 
This comes in the next line.
After deleting line breaks: This is my string This comes in the next line.
9

Vấn đề với điều này là các máy tính hiện đại không lưu trữ nhiều thứ trong các khe cắm 7 bit. Chúng lưu lượng theo đơn vị 8 bit, thường được gọi là byte

Ghi chú. Trong suốt hướng dẫn này, tôi giả định rằng một byte đề cập đến 8 bit, như nó đã có từ những năm 1960, chứ không phải là một số đơn vị lưu trữ khác. Bạn có thể gọi đây là một octet nếu bạn thích

Điều này có nghĩa là không gian lưu trữ được sử dụng bởi ASCII trống một nửa. Nếu không rõ tại sao lại như vậy, hãy xem lại bảng thập phân sang nhị phân ở trên. Bạn có thể biểu thị các số 0 và 1 chỉ bằng 1 bit hoặc bạn có thể sử dụng 8 bit để biểu thị chúng lần lượt là 00000000 và 00000001

Bạn có thể biểu thị các số từ 0 đến 3 chỉ bằng 2 bit hoặc 00 đến 11 hoặc bạn có thể sử dụng 8 bit để biểu thị chúng lần lượt là 00000000, 00000001, 00000010 và 00000011. Điểm mã ASCII cao nhất, 127, chỉ yêu cầu 7 bit quan trọng

Khi biết điều này, bạn có thể thấy rằng

This is a string that
i read from a file
966 chuyển đổi các chuỗi ASCII thành một biểu diễn byte của
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59, trong đó mỗi ký tự tiêu thụ một byte

>>>

mystring = 'This is my string \nThis comes in the next line.'
print["With line breaks:" + mystring]
print["After deleting new lines:",''.join[mystring.splitlines[]]]
9

Việc sử dụng không đúng mức các byte 8 bit của ASCII do các máy tính hiện đại cung cấp đã dẫn đến một nhóm mã hóa không chính thức, xung đột mà mỗi ký tự bổ sung được chỉ định sẽ được sử dụng với 128 điểm mã khả dụng còn lại được cho phép trong sơ đồ mã hóa ký tự 8 bit

Các mã hóa khác nhau này không chỉ xung đột với nhau mà bản thân mỗi mã hóa này vẫn là một đại diện hoàn toàn không hoàn chỉnh của các ký tự trên thế giới, bất kể thực tế là chúng đã sử dụng một bit bổ sung.

Trong những năm qua, một kế hoạch lớn mã hóa một ký tự đã thống trị tất cả. Tuy nhiên, trước khi đến đó, chúng ta hãy nói một chút về các hệ thống đánh số, đây là nền tảng cơ bản của sơ đồ mã hóa ký tự

Loại bỏ các quảng cáo

Bao gồm tất cả các cơ sở. Hệ thống số khác

Trong phần thảo luận về ASCII ở trên, bạn đã thấy rằng mỗi ký tự ánh xạ tới một số nguyên trong khoảng từ 0 đến 127

Phạm vi số này được biểu thị bằng số thập phân [cơ số 10]. Đó là cách mà bạn, tôi và phần còn lại của con người chúng ta đã quen đếm, không có lý do gì phức tạp hơn việc chúng ta có 10 ngón tay

Nhưng cũng có những hệ thống đánh số khác đặc biệt phổ biến trong toàn bộ mã nguồn CPython. Mặc dù “số bên dưới” giống nhau, nhưng tất cả các hệ thống đánh số chỉ là những cách khác nhau để biểu thị cùng một số

Nếu tôi hỏi bạn chuỗi

This is a string that
i read from a file
968 đại diện cho số nào, bạn sẽ đúng khi cho tôi một cái nhìn kỳ lạ trước khi trả lời rằng nó đại diện cho số mười một

Tuy nhiên, biểu diễn chuỗi này có thể biểu thị các số cơ bản khác nhau trong các hệ thống đánh số khác nhau. Ngoài số thập phân, các lựa chọn thay thế bao gồm các hệ thống đánh số phổ biến sau đây

  • nhị phân. cơ sở 2
  • bát phân. cơ sở 8
  • Thập lục phân [hex]. cơ sở 16

Nhưng điều đó có ý nghĩa gì đối với chúng ta khi nói rằng, trong một hệ thống đánh số nhất định, các số được biểu diễn trong cơ số N?

Đây là cách tốt nhất mà tôi biết để nói rõ điều này có nghĩa là gì. đó là số lượng ngón tay mà bạn có thể tin tưởng trong hệ thống đó

Nếu bạn muốn có phần giới thiệu đầy đủ hơn nhưng vẫn nhẹ nhàng về các hệ thống đánh số, Charles Petzold’s Code là một cuốn sách cực kỳ hay, khám phá chi tiết nền tảng của mã máy tính

Một cách để chứng minh cách các hệ thống đánh số khác nhau giải thích cùng một điều là sử dụng hàm tạo

This is a string that
i read from a file
969 của Python. Nếu bạn chuyển một số từ
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59 đến
This is a string that
i read from a file
969, Python sẽ mặc định cho rằng chuỗi đó biểu thị một số trong cơ số 10 trừ khi bạn nói khác đi

>>>

With line breaks:This is my string 
This comes in the next line.
After deleting new lines: This is my string This comes in the next line.
9

Có một cách phổ biến hơn để nói với Python rằng số nguyên của bạn được nhập vào một cơ số khác 10. Python chấp nhận các dạng chữ của mỗi trong số 3 hệ thống đánh số thay thế ở trên

Loại LiteralPrefixExamplen/an/a

This is a string that
i read from a file
972Binary literal
This is a string that
i read from a file
973 or
This is a string that
i read from a file
974
This is a string that
i read from a file
975Boctal literal
This is a string that
i read from a file
976 or
This is a string that
i read from a file
977
This is a string that
i read from a file
978Hex literal
This is a string that
i read from a file
979 or
This is a string that
i read from a file
980
This is a string that
i read from a file
981

Tất cả đều là các dạng con của số nguyên. Bạn có thể thấy rằng những kết quả này tương ứng tạo ra kết quả tương tự như các lệnh gọi tới

This is a string that
i read from a file
969 với các giá trị
This is a string that
i read from a file
983 không mặc định. Tất cả họ chỉ là
With newlines:
This is my string. 

After deleting the newlines: This is my string.
91 với Python

>>>

my_str = 'This is a string that\ni read from a file\n'
print[my_str]
9

Đây là cách bạn có thể nhập số nhị phân, bát phân và thập lục phân tương đương của các số thập phân từ 0 đến 20. Bất kỳ thứ nào trong số này đều hoàn toàn hợp lệ trong trình biên dịch Python hoặc mã nguồn và tất cả đều thuộc loại

With newlines:
This is my string. 

After deleting the newlines: This is my string.
91

DecimalBinaryOctalHex

This is a string that
i read from a file
914
This is a string that
i read from a file
987
This is a string that
i read from a file
988
This is a string that
i read from a file
989
This is a string that
i read from a file
916
This is a string that
i read from a file
991
This is a string that
i read from a file
992
This is a string that
i read from a file
993
This is a string that
i read from a file
918
This is a string that
i read from a file
995
This is a string that
i read from a file
996
This is a string that
i read from a file
997
This is a string that
i read from a file
920
This is a string that
i read from a file
975
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3800
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3801
This is a string that
i read from a file
922
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3803
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3804
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3805
This is a string that
i read from a file
924
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3807
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3808
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3809
This is a string that
i read from a file
926
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3811
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3812
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3813
This is a string that
i read from a file
928
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3815
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3816
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3817
This is a string that
i read from a file
930
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3819
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3820
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3821
This is a string that
i read from a file
932
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3823
This is a string that
i read from a file
978
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3825
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3826
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3827
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3828
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3829
This is a string that
i read from a file
972
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3831
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3832
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3833
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3834
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3835
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3836
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3837
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3838
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3839
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3840
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3841
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3842
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3843
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3844
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3845
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3846
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3847
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3848
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3849
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3850
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3851
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3852
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3853
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3854
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3855
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3856
This is a string that
i read from a file
981
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3858
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3859
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3860
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3861
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3862_

Số nguyên trong nguồn CPythonHiển thị/Ẩn

Thật ngạc nhiên là mức độ phổ biến của các biểu thức này trong Thư viện chuẩn Python. Nếu bạn muốn tự mình xem, hãy điều hướng đến bất kỳ vị trí nào trong thư mục

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3870 của bạn và kiểm tra việc sử dụng các ký tự hex như thế này

This is a string that
i read from a file
90

Điều này sẽ hoạt động trên bất kỳ hệ thống Unix nào có

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3871. Bạn có thể sử dụng
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3872 để tìm kiếm các ký tự bát phân hoặc “\b0b” để tìm kiếm các ký tự nhị phân

Đối số cho việc sử dụng các cú pháp văn học

With newlines:
This is my string. 

After deleting the newlines: This is my string.
91 thay thế này là gì? . Ba hệ thống số thay thế này đôi khi đưa ra cách thể hiện các giá trị theo cách thân thiện với máy tính. Ví dụ: số 65536 hoặc 216, chỉ là 10000 ở dạng thập lục phân hoặc
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3874 dưới dạng chữ thập lục phân Python

Loại bỏ các quảng cáo

Nhập Unicode

Như bạn đã thấy, vấn đề với ASCII là nó gần như không phải là một tập hợp các ký tự đủ lớn để phù hợp với tập hợp ngôn ngữ, phương ngữ, ký hiệu và nét vẽ của thế giới. [Nó thậm chí không đủ lớn cho riêng tiếng Anh. ]

Unicode về cơ bản phục vụ cùng một mục đích như ASCII, nhưng nó chỉ bao gồm một cách, cách, cách tập hợp các điểm mã lớn hơn. Có một số bảng mã xuất hiện theo trình tự thời gian giữa ASCII và Unicode, nhưng chúng không thực sự đáng được đề cập vì Unicode và một trong các sơ đồ mã hóa của nó, UTF-8, đã được sử dụng chủ yếu.

Hãy nghĩ về Unicode như một phiên bản đồ sộ của bảng ASCII—một phiên bản có 1.114.112 điểm mã có thể. Đó là 0 đến 1,114,111 hoặc 0 đến 17 * [216] - 1 hoặc

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3875 hệ thập lục phân. Trên thực tế, ASCII là tập hợp con hoàn hảo của Unicode. 128 ký tự đầu tiên trong bảng Unicode tương ứng chính xác với các ký tự ASCII mà bạn mong đợi một cách hợp lý.

Vì lợi ích của việc chính xác về mặt kỹ thuật, bản thân Unicode không phải là một mã hóa. Thay vào đó, Unicode được triển khai bằng các mã hóa ký tự khác nhau mà bạn sẽ sớm thấy. Unicode tốt hơn nên được coi là một bản đồ [giống như một

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3876] hoặc một bảng cơ sở dữ liệu 2 cột. Nó ánh xạ các ký tự [như
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3877,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3878 hoặc thậm chí
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3879] thành các số nguyên dương, khác biệt. Mã hóa ký tự cần cung cấp thêm một chút

Unicode hầu như chứa mọi ký tự mà bạn có thể tưởng tượng, bao gồm cả những ký tự không in được bổ sung. Một trong những mục yêu thích của tôi là dấu từ phải sang trái phiền phức, có mã điểm 8207 và được sử dụng trong văn bản có cả chữ viết từ trái sang phải và từ phải sang trái, chẳng hạn như một bài viết có cả đoạn văn tiếng Anh và tiếng Ả Rập

Ghi chú. Thế giới mã hóa ký tự là một trong nhiều chi tiết kỹ thuật chi tiết mà một số người thích soi mói. Một chi tiết như vậy là chỉ có 1.111.998 điểm mã Unicode thực sự có thể sử dụng được, do một số lý do cổ xưa.

Unicode so với UTF-8

Không mất nhiều thời gian để mọi người nhận ra rằng tất cả các ký tự trên thế giới không thể gói gọn trong một byte. Rõ ràng là các mã hóa hiện đại, toàn diện hơn sẽ cần sử dụng nhiều byte để mã hóa một số ký tự

Ở trên, bạn cũng đã thấy rằng Unicode về mặt kỹ thuật không phải là mã hóa ký tự toàn diện. Tại sao vậy?

Có một điều mà Unicode không nói với bạn. nó không cho bạn biết cách lấy các bit thực tế từ văn bản—chỉ các điểm mã. Nó không cho bạn biết đủ về cách chuyển đổi văn bản thành dữ liệu nhị phân và ngược lại

Unicode là một tiêu chuẩn mã hóa trừu tượng, không phải là một bảng mã. Đó là nơi UTF-8 và các sơ đồ mã hóa khác phát huy tác dụng. Tiêu chuẩn Unicode [bản đồ các ký tự tới các điểm mã] xác định một số mã hóa khác nhau từ bộ ký tự đơn của nó

UTF-8 cũng như những người anh em họ ít được sử dụng hơn của nó, UTF-16 và UTF-32, là các định dạng mã hóa để biểu thị các ký tự Unicode dưới dạng dữ liệu nhị phân của một hoặc nhiều byte trên mỗi ký tự. Chúng ta sẽ thảo luận về UTF-16 và UTF-32 trong giây lát, nhưng UTF-8 đã chiếm thị phần lớn nhất cho đến nay

Điều đó đưa chúng ta đến một định nghĩa đã quá hạn. Chính thức, nó có nghĩa là gì để mã hóa và giải mã?

Mã hóa và giải mã trong Python 3

Loại

With newlines:
This is my string. 

After deleting the newlines: This is my string.
59 của Python 3 có nghĩa là đại diện cho văn bản mà con người có thể đọc được và có thể chứa bất kỳ ký tự Unicode nào

Ngược lại, loại

With newlines:
This is my string. 

After deleting the newlines: This is my string.
90 đại diện cho dữ liệu nhị phân hoặc chuỗi byte thô, về bản chất không có mã hóa được đính kèm với nó

Mã hóa và giải mã là quá trình đi từ cái này sang cái khác

Mã hóa vs giải mã [Hình ảnh. Trăn thật]

Trong

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3882 và
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3883, tham số
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3884 là
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3885 theo mặc định, mặc dù việc chỉ định nó thường an toàn hơn và rõ ràng hơn

>>>

This is a string that
i read from a file
91

Kết quả của

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3886 là một đối tượng. Cả ký tự byte [chẳng hạn như
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3888] và biểu diễn byte chỉ cho phép các ký tự ASCII

Đây là lý do tại sao, khi gọi

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3889,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3890 tương thích ASCII được phép biểu diễn như hiện tại, nhưng n với dấu ngã được thoát thành
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3891. Chuỗi trông lộn xộn đó đại diện cho hai byte,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3892 và
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3893 ở dạng hex

>>>

This is a string that
i read from a file
92

Nghĩa là, ký tự

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3894 yêu cầu hai byte để biểu diễn nhị phân theo UTF-8

Ghi chú. Nếu bạn nhập

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3895, có thể bạn sẽ thấy giá trị mặc định là
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3896. Hãy cẩn thận khi loại trừ điều này và chỉ sử dụng
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3897, vì mặc định trong Windows trước Python 3. 6

Loại bỏ các quảng cáo

Trăn 3. Tất tay trên Unicode

Python 3 hoàn toàn phù hợp với Unicode và UTF-8 cụ thể. Đây là ý nghĩa của nó

  • Mã nguồn Python 3 được mặc định là UTF-8. Điều này có nghĩa là bạn không cần

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    3898 ở đầu tệp
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    3899 trong Python 3

  • Tất cả văn bản [

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59] là Unicode theo mặc định. Văn bản Unicode đã mã hóa được biểu diễn dưới dạng dữ liệu nhị phân [
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    90]. Loại
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59 có thể chứa bất kỳ ký tự Unicode bằng chữ nào, chẳng hạn như
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    503, tất cả sẽ được lưu trữ dưới dạng Unicode

  • , có nghĩa là

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    504 hợp lệ nếu điều này làm bạn thích

  • Mô-đun

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    505 của Python mặc định là cờ
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    506 thay vì
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    507. Điều này có nghĩa là, chẳng hạn,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    508 khớp với các ký tự từ Unicode, không chỉ các ký tự ASCII

  • With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    3884 mặc định trong
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    3886 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    511 là UTF-8

Có một thuộc tính khác có nhiều sắc thái hơn, đó là giá trị mặc định của

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3884 đối với
With newlines:
This is my string. 

After deleting the newlines: This is my string.
513 tích hợp phụ thuộc vào nền tảng và phụ thuộc vào giá trị của
With newlines:
This is my string. 

After deleting the newlines: This is my string.
514

>>>

This is a string that
i read from a file
93

Một lần nữa, bài học ở đây là hãy cẩn thận khi đưa ra các giả định khi nói đến tính phổ biến của UTF-8, ngay cả khi đó là mã hóa chiếm ưu thế. Rõ ràng trong mã của bạn không bao giờ gây hại

Một byte, hai byte, ba byte, bốn

Một tính năng quan trọng là UTF-8 là mã hóa có độ dài thay đổi. Thật hấp dẫn để tìm hiểu điều này có nghĩa là gì, nhưng nó đáng để đi sâu vào

Nghĩ lại phần về ASCII. Mọi thứ trong vùng đất mở rộng ASCII đều yêu cầu tối đa một byte dung lượng. Bạn có thể nhanh chóng chứng minh điều này bằng biểu thức trình tạo sau

>>>

This is a string that
i read from a file
94

UTF-8 khá khác biệt. Một ký tự Unicode nhất định có thể chiếm bất kỳ đâu từ một đến bốn byte. Đây là một ví dụ về một ký tự Unicode duy nhất chiếm bốn byte

>>>

This is a string that
i read from a file
95

Đây là một tính năng tinh tế nhưng quan trọng của

With newlines:
This is my string. 

After deleting the newlines: This is my string.
515

  • Độ dài của một ký tự Unicode dưới dạng Python
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59 sẽ luôn là 1, bất kể nó chiếm bao nhiêu byte
  • Độ dài của cùng một ký tự được mã hóa thành
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    90 sẽ nằm trong khoảng từ 1 đến 4

Bảng dưới đây tóm tắt những loại ký tự chung phù hợp với từng nhóm độ dài byte

Phạm vi thập phân Phạm vi Hex Bao gồm những gì Ví dụ0 đến 127

With newlines:
This is my string. 

After deleting the newlines: This is my string.
518 đến
With newlines:
This is my string. 

After deleting the newlines: This is my string.
519U. S. ASCII
With newlines:
This is my string. 

After deleting the newlines: This is my string.
520,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
521,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
522,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
523128 to 2047
With newlines:
This is my string. 

After deleting the newlines: This is my string.
524 to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
525Most Latinic alphabets*
With newlines:
This is my string. 

After deleting the newlines: This is my string.
526,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
527,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
528,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
5292048 to 65535
With newlines:
This is my string. 

After deleting the newlines: This is my string.
530 to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
531Additional parts of the multilingual plane [BMP]**
With newlines:
This is my string. 

After deleting the newlines: This is my string.
532,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
533,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
534,
With newlines:
This is my string. 

After deleting the newlines: This is my string.
53565536 to 1114111
With newlines:
This is my string. 

After deleting the newlines: This is my string.
536 to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
537Other***
With newlines:
This is my string. 

After deleting the newlines: This is my string.
538

*Chẳng hạn như tiếng Anh, tiếng Ả Rập, tiếng Hy Lạp và tiếng Ireland
**Một lượng lớn ngôn ngữ và ký hiệu—chủ yếu là tiếng Trung, tiếng Nhật và tiếng Hàn theo số lượng [cũng như bảng chữ cái ASCII và tiếng Latinh
***Additional Chinese, Japanese, Korean, and Vietnamese characters, plus more symbols and emojis

Ghi chú. Để không đánh mất bức tranh toàn cảnh, có một bộ tính năng kỹ thuật bổ sung của UTF-8 không được đề cập ở đây vì chúng hiếm khi hiển thị đối với người dùng Python

Chẳng hạn, UTF-8 thực sự sử dụng các mã tiền tố cho biết số lượng byte trong một chuỗi. Điều này cho phép bộ giải mã cho biết byte nào thuộc về nhau trong mã hóa có độ dài thay đổi và cho phép byte đầu tiên đóng vai trò là chỉ báo về số lượng byte trong chuỗi tiếp theo

Bài viết UTF-8 của Wikipedia không né tránh các chi tiết kỹ thuật và luôn có Tiêu chuẩn Unicode chính thức để bạn đọc thoải mái.

Thế còn UTF-16 và UTF-32 thì sao?

Hãy quay lại với hai biến thể mã hóa khác, UTF-16 và UTF-32

Sự khác biệt giữa những điều này và UTF-8 là đáng kể trong thực tế. Dưới đây là ví dụ về mức độ khác biệt lớn với chuyển đổi khứ hồi

>>>

This is a string that
i read from a file
96

Trong trường hợp này, mã hóa bốn chữ cái Hy Lạp bằng UTF-8 và sau đó giải mã trở lại văn bản bằng UTF-16 sẽ tạo ra một văn bản

With newlines:
This is my string. 

After deleting the newlines: This is my string.
59 bằng một ngôn ngữ hoàn toàn khác [tiếng Hàn]

Kết quả sai rõ ràng như thế này có thể xảy ra khi cùng một mã hóa không được sử dụng hai chiều. Hai biến thể giải mã cùng một đối tượng

With newlines:
This is my string. 

After deleting the newlines: This is my string.
90 có thể tạo ra kết quả thậm chí không cùng ngôn ngữ

Bảng này tóm tắt phạm vi hoặc số byte theo UTF-8, UTF-16 và UTF-32

Mã hóaByte trên mỗi ký tự [Bao gồm]Độ dài thay đổiUTF-81 đến 4CóUTF-162 đến 4CóUTF-324Không

Một khía cạnh gây tò mò khác của họ UTF là UTF-8 không phải lúc nào cũng chiếm ít dung lượng hơn UTF-16. Điều đó có vẻ phản trực giác về mặt toán học, nhưng hoàn toàn có thể

>>>

This is a string that
i read from a file
97

Lý do cho điều này là các điểm mã trong phạm vi

With newlines:
This is my string. 

After deleting the newlines: This is my string.
544 đến
With newlines:
This is my string. 

After deleting the newlines: This is my string.
545 [2048 đến 65535 ở dạng thập phân] chiếm ba byte trong UTF-8 so với chỉ hai byte trong UTF-16

Tôi hoàn toàn không khuyên bạn nên nhảy lên tàu UTF-16, bất kể bạn có hoạt động bằng ngôn ngữ có các ký tự thường nằm trong phạm vi này hay không. Trong số các lý do khác, một trong những lập luận mạnh mẽ để sử dụng UTF-8 là, trong thế giới mã hóa, đó là

Chưa kể, đó là năm 2019. bộ nhớ máy tính rẻ, vì vậy việc tiết kiệm 4 byte bằng cách sử dụng UTF-16 được cho là không đáng

Loại bỏ các quảng cáo

Các chức năng tích hợp sẵn của Python

Bạn đã vượt qua phần khó khăn. Đã đến lúc sử dụng những gì bạn đã thấy cho đến nay trong Python

Python có một nhóm các hàm tích hợp có liên quan theo một cách nào đó đến các hệ thống đánh số và mã hóa ký tự

Chúng có thể được nhóm hợp lý với nhau dựa trên mục đích của chúng

  • With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    546,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    547,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    550 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    552 là để có được một biểu diễn khác của đầu vào. Mỗi người tạo ra một
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59. Đầu tiên,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    546, tạo ra một đại diện duy nhất ASCII của một đối tượng, với các ký tự không phải ASCII được thoát. Ba phần còn lại lần lượt biểu diễn nhị phân, thập lục phân và bát phân của một số nguyên. Đây chỉ là những đại diện, không phải là một thay đổi cơ bản trong đầu vào

  • With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    548,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    554 và
    This is a string that
    i read from a file
    969 là các hàm tạo của lớp cho các loại tương ứng của chúng,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    90,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    91. Mỗi người đều đưa ra các cách ép buộc đầu vào vào loại mong muốn. Chẳng hạn, như bạn đã thấy trước đó, trong khi
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    567 có thể phổ biến hơn, bạn cũng có thể thấy
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    568

  • This is a string that
    i read from a file
    960 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    549 là nghịch đảo của nhau trong đó hàm
    This is a string that
    i read from a file
    960 của Python chuyển đổi một ký tự
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    59 thành điểm mã cơ số 10 của nó, trong khi
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    549 thì ngược lại

Dưới đây là một cái nhìn chi tiết hơn về từng chức năng trong số chín chức năng này

FunctionSignatureAcceptsReturn TypePurpose

With newlines:
This is my string. 

After deleting the newlines: This is my string.
546
With newlines:
This is my string. 

After deleting the newlines: This is my string.
575Varies
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59ASCII chỉ đại diện cho một đối tượng, với các ký tự không phải ASCII được thoát
With newlines:
This is my string. 

After deleting the newlines: This is my string.
547
With newlines:
This is my string. 

After deleting the newlines: This is my string.
578
With newlines:
This is my string. 

After deleting the newlines: This is my string.
579
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59Biểu diễn nhị phân của một số nguyên, với tiền tố _______1581
With newlines:
This is my string. 

After deleting the newlines: This is my string.
548
With newlines:
This is my string. 

After deleting the newlines: This is my string.
583

_______1584

With newlines:
This is my string. 

After deleting the newlines: This is my string.
585

With newlines:
This is my string. 

After deleting the newlines: This is my string.
586Varies
With newlines:
This is my string. 

After deleting the newlines: This is my string.
90Coerce [convert] the input to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
90, raw binary data
With newlines:
This is my string. 

After deleting the newlines: This is my string.
549
With newlines:
This is my string. 

After deleting the newlines: This is my string.
590
With newlines:
This is my string. 

After deleting the newlines: This is my string.
591

With newlines:
This is my string. 

After deleting the newlines: This is my string.
592

With newlines:
This is my string. 

After deleting the newlines: This is my string.
593
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59Convert an integer code point to a single Unicode character
With newlines:
This is my string. 

After deleting the newlines: This is my string.
550
With newlines:
This is my string. 

After deleting the newlines: This is my string.
596
With newlines:
This is my string. 

After deleting the newlines: This is my string.
579
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59Hexadecimal representation of an integer, with the prefix
With newlines:
This is my string. 

After deleting the newlines: This is my string.
599
This is a string that
i read from a file
969
With newlines:
This is my string. 

After deleting the newlines: This is my string.
901

With newlines:
This is my string. 

After deleting the newlines: This is my string.
902Varies
With newlines:
This is my string. 

After deleting the newlines: This is my string.
91Coerce [convert] the input to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
91
With newlines:
This is my string. 

After deleting the newlines: This is my string.
552
With newlines:
This is my string. 

After deleting the newlines: This is my string.
906
With newlines:
This is my string. 

After deleting the newlines: This is my string.
579
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59Octal representation of an integer, with the prefix
With newlines:
This is my string. 

After deleting the newlines: This is my string.
909
This is a string that
i read from a file
960
With newlines:
This is my string. 

After deleting the newlines: This is my string.
911
With newlines:
This is my string. 

After deleting the newlines: This is my string.
912

With newlines:
This is my string. 

After deleting the newlines: This is my string.
913
With newlines:
This is my string. 

After deleting the newlines: This is my string.
91Convert a single Unicode character to its integer code point
With newlines:
This is my string. 

After deleting the newlines: This is my string.
554
With newlines:
This is my string. 

After deleting the newlines: This is my string.
916

With newlines:
This is my string. 

After deleting the newlines: This is my string.
917Varies
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59Coerce [convert] the input to
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59, text

Bạn có thể mở rộng phần bên dưới để xem một số ví dụ về từng chức năng

Ví dụ. ascii[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
546 cung cấp cho bạn một biểu diễn chỉ ASCII của một đối tượng, với các ký tự không phải ASCII được thoát

>>>

This is a string that
i read from a file
98

Ví dụ. bin[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
547 cung cấp cho bạn biểu diễn nhị phân của một số nguyên, với tiền tố
With newlines:
This is my string. 

After deleting the newlines: This is my string.
581

>>>

This is a string that
i read from a file
99

Ví dụ. bytes[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
548 buộc đầu vào thành
With newlines:
This is my string. 

After deleting the newlines: This is my string.
90, đại diện cho dữ liệu nhị phân thô

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
380

Ví dụ. chr[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
549 chuyển đổi một điểm mã số nguyên thành một ký tự Unicode

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
381

Ví dụ. hex[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
550 đưa ra biểu diễn thập lục phân của một số nguyên, với tiền tố
With newlines:
This is my string. 

After deleting the newlines: This is my string.
599

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
382

Ví dụ. int[]Hiện/Ẩn

This is a string that
i read from a file
969 ép buộc đầu vào thành
With newlines:
This is my string. 

After deleting the newlines: This is my string.
91, tùy ý diễn giải đầu vào trong một cơ sở nhất định

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
383

Ví dụ. ord[]Hiện/Ẩn

Hàm Python

This is a string that
i read from a file
960 chuyển đổi một ký tự Unicode thành điểm mã số nguyên của nó

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
384

Ví dụ. str[]Hiện/Ẩn

With newlines:
This is my string. 

After deleting the newlines: This is my string.
554 buộc đầu vào thành
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59, đại diện cho văn bản

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
385

Chuỗi ký tự Python. Cách để lột da một con mèo

Thay vì sử dụng hàm tạo

With newlines:
This is my string. 

After deleting the newlines: This is my string.
554, người ta thường nhập _____159 theo nghĩa đen

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
386

Điều đó có vẻ đủ dễ dàng. Nhưng khía cạnh thú vị của mọi thứ là vì Python 3 hoàn toàn lấy Unicode làm trung tâm, bạn có thể “gõ” các ký tự Unicode mà bạn có thể sẽ không tìm thấy trên bàn phím của mình. Bạn có thể sao chép và dán quyền này vào trình thông dịch viên Python 3

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
387

Bên cạnh việc đặt các ký tự Unicode thực tế, không thoát trong bảng điều khiển, còn có nhiều cách khác để nhập chuỗi Unicode

Một trong những phần dày đặc nhất của tài liệu Python là phần về phân tích từ vựng, cụ thể là phần về. Cá nhân tôi đã phải đọc phần này khoảng một, hai hoặc có thể chín lần để nó thực sự thấm nhuần.

Một phần của những gì nó nói là có tới sáu cách mà Python sẽ cho phép bạn nhập cùng một ký tự Unicode

Cách đầu tiên và phổ biến nhất là nhập ký tự theo nghĩa đen, như bạn đã thấy. Phần khó khăn với phương pháp này là tìm các tổ hợp phím thực tế. Đó là nơi các phương pháp khác để nhận và đại diện cho các ký tự phát huy tác dụng. Đây là danh sách đầy đủ

Chuỗi thoát Ý nghĩa Cách thể hiện

With newlines:
This is my string. 

After deleting the newlines: This is my string.
3877
With newlines:
This is my string. 

After deleting the newlines: This is my string.
936Ký tự có giá trị bát phân _______1937
With newlines:
This is my string. 

After deleting the newlines: This is my string.
938
With newlines:
This is my string. 

After deleting the newlines: This is my string.
939Ký tự có giá trị hex 1940
With newlines:
This is my string. 

After deleting the newlines: This is my string.
941
With newlines:
This is my string. 

After deleting the newlines: This is my string.
942Ký tự có tên
With newlines:
This is my string. 

After deleting the newlines: This is my string.
943 trong cơ sở dữ liệu Unicode
With newlines:
This is my string. 

After deleting the newlines: This is my string.
944
With newlines:
This is my string. 

After deleting the newlines: This is my string.
945Ký tự có giá trị hex 16 bit [2 byte]

Đây là một số bằng chứng và xác nhận ở trên

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
388

Bây giờ, có hai lưu ý chính

  1. Không phải tất cả các biểu mẫu này đều phù hợp với tất cả các ký tự. Biểu diễn hex của số nguyên 300 là

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    951, đơn giản là sẽ không khớp với mã thoát 2 chữ số hex
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    939. Điểm mã cao nhất mà bạn có thể đưa vào chuỗi thoát này là ________ 1953 [________ 1954]. Tương tự như vậy đối với
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    936, nó sẽ chỉ hoạt động đến
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    956 [
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    957]

  2. Đối với

    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    958,
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    959 và
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    960, số lượng chữ số được yêu cầu chính xác như được hiển thị trong các ví dụ này. Điều này có thể khiến bạn bối rối vì cách mà các bảng Unicode thường hiển thị mã cho các ký tự, với một
    With newlines:
    This is my string. 
    
    After deleting the newlines: This is my string.
    961 ở đầu và số lượng ký tự hex có thể thay đổi. Điều quan trọng là các bảng Unicode thường không đệm các mã này

Chẳng hạn, nếu bạn tham khảo bảng unicode. com để biết thông tin về chữ cái Gothic faihu [hoặc fehu],

With newlines:
This is my string. 

After deleting the newlines: This is my string.
962, bạn sẽ thấy rằng nó được liệt kê là có mã
With newlines:
This is my string. 

After deleting the newlines: This is my string.
963

Làm thế nào để bạn đặt cái này vào

With newlines:
This is my string. 

After deleting the newlines: This is my string.
945 hoặc
With newlines:
This is my string. 

After deleting the newlines: This is my string.
948?

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
389

Điều này cũng có nghĩa là biểu mẫu

With newlines:
This is my string. 

After deleting the newlines: This is my string.
948 là chuỗi thoát duy nhất có khả năng chứa bất kỳ ký tự Unicode nào

Ghi chú. Đây là một chức năng ngắn để chuyển đổi các chuỗi trông giống như

With newlines:
This is my string. 

After deleting the newlines: This is my string.
969 thành thứ mà Python có thể làm việc với. Nó sử dụng
With newlines:
This is my string. 

After deleting the newlines: This is my string.
970

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
50

Loại bỏ các quảng cáo

Mã hóa khác có sẵn trong Python

Cho đến nay, bạn đã thấy bốn mã hóa ký tự

  1. ASCII
  2. UTF-8
  3. UTF-16
  4. UTF-32

Có rất nhiều cái khác ngoài kia

Một ví dụ là Latin-1 [còn được gọi là ISO-8859-1], về mặt kỹ thuật là mặc định cho Giao thức truyền siêu văn bản [HTTP], mỗi. Windows có biến thể Latin-1 của riêng mình được gọi là cp1252

Ghi chú. ISO-8859-1 vẫn còn rất nhiều trong tự nhiên. Thư viện

With newlines:
This is my string. 

After deleting the newlines: This is my string.
971 tuân theo RFC 2616 “đến từng chữ cái” trong việc sử dụng nó làm mã hóa mặc định cho nội dung của phản hồi HTTP hoặc HTTPS. Nếu từ “văn bản” được tìm thấy trong tiêu đề
With newlines:
This is my string. 

After deleting the newlines: This is my string.
972 và không có mã hóa nào khác được chỉ định, thì
With newlines:
This is my string. 

After deleting the newlines: This is my string.
971

Nó nằm sâu trong tài liệu về mô-đun

With newlines:
This is my string. 

After deleting the newlines: This is my string.
974, là một phần của Thư viện chuẩn của Python

Có một mã hóa được công nhận hữu ích khác cần lưu ý, đó là

With newlines:
This is my string. 

After deleting the newlines: This is my string.
975. Nếu bạn có một
With newlines:
This is my string. 

After deleting the newlines: This is my string.
59 đã được giải mã và muốn nhanh chóng nhận được một biểu diễn theo nghĩa đen Unicode đã thoát của nó, thì bạn có thể chỉ định mã hóa này trong
With newlines:
This is my string. 

After deleting the newlines: This is my string.
3882

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
51

Bạn biết họ nói gì về giả định…

Chỉ vì Python đưa ra giả định mã hóa UTF-8 cho các tệp và mã mà bạn tạo không có nghĩa là bạn, lập trình viên, nên hoạt động với cùng một giả định đối với dữ liệu ngoài

Hãy nói điều đó một lần nữa bởi vì đó là một quy tắc để sống theo. khi bạn nhận được dữ liệu nhị phân [byte] từ nguồn của bên thứ ba, cho dù đó là từ tệp hay qua mạng, cách tốt nhất là kiểm tra xem dữ liệu đó có chỉ định mã hóa không. Nếu không, thì bạn phải hỏi

Tất cả I/O xảy ra theo byte, không phải văn bản và byte chỉ là số 1 và số 0 đối với máy tính cho đến khi bạn thông báo cho máy tính biết cách khác bằng cách thông báo mã hóa cho máy tính

Đây là một ví dụ về nơi mọi thứ có thể đi sai. Bạn đã đăng ký một API sẽ gửi cho bạn công thức nấu ăn trong ngày mà bạn nhận được vào

With newlines:
This is my string. 

After deleting the newlines: This is my string.
90 và luôn giải mã bằng cách sử dụng
With newlines:
This is my string. 

After deleting the newlines: This is my string.
979 mà không gặp vấn đề gì. Vào ngày đặc biệt này, một phần của công thức trông như thế này

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
52

Có vẻ như công thức yêu cầu một ít bột mì, nhưng chúng tôi không biết bao nhiêu

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
53

ồ ồ. Có một

With newlines:
This is my string. 

After deleting the newlines: This is my string.
56 phiền phức có thể cắn bạn khi bạn đưa ra các giả định về mã hóa. Bạn kiểm tra với máy chủ API. Xin thưa, dữ liệu thực sự được gửi qua mã hóa bằng tiếng Latin-1

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
54

chúng ta đi thôi. Trong , mỗi ký tự khớp với một byte đơn, trong khi ký tự “¼” chiếm hai byte trong UTF-8 [

With newlines:
This is my string. 

After deleting the newlines: This is my string.
981]

Bài học ở đây là có thể nguy hiểm khi giả sử mã hóa bất kỳ dữ liệu nào được chuyển cho bạn. Ngày nay, nó thường là UTF-8, nhưng đó là một tỷ lệ nhỏ các trường hợp mà nó không làm nổ tung mọi thứ

Nếu bạn thực sự cần phải bỏ tàu và đoán mã hóa, thì hãy xem thư viện

With newlines:
This is my string. 

After deleting the newlines: This is my string.
982, sử dụng phương pháp của Mozilla để đưa ra dự đoán có cơ sở về văn bản được mã hóa mơ hồ. Điều đó nói rằng, một công cụ như
With newlines:
This is my string. 

After deleting the newlines: This is my string.
982 nên là phương án cuối cùng của bạn, không phải là phương án đầu tiên của bạn

Loại bỏ các quảng cáo

Vụn vặt.
With newlines:
This is my string. 

After deleting the newlines: This is my string.
984

Chúng tôi sẽ thiếu sót nếu không đề cập đến

With newlines:
This is my string. 

After deleting the newlines: This is my string.
984 từ Thư viện chuẩn Python, cho phép bạn tương tác và tra cứu trên Cơ sở dữ liệu ký tự Unicode [UCD]

>>>

With newlines:
This is my string. 

After deleting the newlines: This is my string.
55

kết thúc

Trong bài viết này, bạn đã giải mã chủ đề rộng lớn và ấn tượng của mã hóa ký tự trong Python

Bạn đã bao phủ rất nhiều nền tảng ở đây

  • Các khái niệm cơ bản về mã hóa ký tự và hệ thống đánh số
  • Số nguyên, nhị phân, bát phân, hex, str và byte trong Python
  • Các chức năng tích hợp sẵn của Python liên quan đến hệ thống mã hóa và đánh số ký tự
  • Xử lý văn bản so với dữ liệu nhị phân của Python 3

Bây giờ, hãy tiếp tục và mã hóa

Tài nguyên

Để biết thêm chi tiết về các chủ đề được đề cập ở đây, hãy xem các tài nguyên này

  • Joel Spolsky. Mức tối thiểu tuyệt đối mà mọi nhà phát triển phần mềm hoàn toàn phải biết về Unicode và bộ ký tự [Không có lý do gì. ]
  • David Zentgraf. Điều mà mọi lập trình viên hoàn toàn cần biết về mã hóa và bộ ký tự để làm việc với văn bản
  • mozilla. Một cách tiếp cận tổng hợp để phát hiện ngôn ngữ/mã hóa
  • Wikipedia. UTF-8
  • John Skeet. Unicode và. BỌC LƯỚI
  • Charles Petzold. Mã số. Ngôn ngữ ẩn của phần cứng và phần mềm máy tính
  • Nhóm làm việc về mạng, RFC 3629. UTF-8, định dạng chuyển đổi của ISO 10646
  • Chuẩn kỹ thuật Unicode #18. Biểu thức chính quy Unicode

Tài liệu Python có hai trang về chủ đề này

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Unicode trong Python. Làm việc với mã hóa ký tự

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Brad Solomon

Brad là một kỹ sư phần mềm và là thành viên của Nhóm hướng dẫn Python thực sự

» Thông tin thêm về Brad

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Alex

Aldren

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

\n có phải là một chuỗi thoát không?

Các chuỗi thoát được sử dụng bên trong các chuỗi, không chỉ các chuỗi cho printf, để biểu thị các ký tự đặc biệt. Đặc biệt, chuỗi thoát \n đại diện cho ký tự xuống dòng .

Giải mã [] trong Python là gì?

Hàm giải mã byte byte[] của Python được dùng để chuyển đổi byte thành đối tượng chuỗi . Cả hai chức năng này cho phép chúng tôi chỉ định sơ đồ xử lý lỗi để sử dụng cho lỗi mã hóa/giải mã. Mặc định là 'nghiêm ngặt' có nghĩa là các lỗi mã hóa làm tăng UnicodeEncodeError.

\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.

Cách kiểm tra utf

String encode[] Tham số . Nó trả về một phiên bản được mã hóa utf-8 của chuỗi. Trong trường hợp không thành công, nó sẽ tạo ra một ngoại lệ UnicodeDecodeError.

Chủ Đề