Làm việc với các ký tự Unicode? Bạn sẽ cần các hàm ord() và chr() của Python. Tìm hiểu những gì mỗi người làm và tại sao bạn nên sử dụng chúng bằng cách đọc bài viết này.
Trong bài viết này, chúng ta sẽ xem xét một số ví dụ về chuyển đổi một ký tự sang mã Unicode của nó bằng cách sử dụng hàm ord() của Python. Chúng ta cũng sẽ xem lại hàm chr() của Unicode và Python. Vậy hãy bắt đầu!
Các bài viết liên quan:
Khái niệm cơ bản về Unicode
Máy tính, ở mức cơ bản nhất, hoạt động với các con số. Về cơ bản, các ký tự và chữ cái trên màn hình được mã hóa dưới dạng danh sách các số nguyên.
Trước Unicode, có hàng trăm kỹ thuật mã hóa ký tự riêng biệt để phân bổ các số này. Những mã hóa ký tự ban đầu này bị hạn chế về kích thước và không thể chứa tất cả các ngôn ngữ trên thế giới. Unicode Consortium được tạo ra để giải quyết vấn đề này. Unicode gán cho mỗi ký tự một số duy nhất, cho phép lập trình viên tạo các chuỗi có các ký tự khác nhau đến từ các ngôn ngữ khác nhau, bao gồm biểu tượng cảm xúc và các ký tự đặc biệt khác.
Chuỗi (còn gọi là giá trị văn bản) là một loại dữ liệu cơ bản trong lập trình và bạn có thể gặp phải nhiều vấn đề có thể giải quyết bằng cách sử dụng chuỗi và Unicode.
Function ord() làm gì?
Trong Python, hàm ord() trả về mã Unicode cho một ký tự. Hàm này lấy văn bản có độ dài đơn vị làm đối số và trả về giá trị tương đương Unicode của tham số đã chỉ định. Khi đối số là một đối tượng Unicode, phương thức ord() của Python trả về một số nguyên tương ứng với điểm mã Unicode của ký tự (hoặc giá trị của byte khi đối số là một chuỗi 8 bit).
Tìm hiểu thêm về Unicode
Các chương trình máy tính ngày nay phải có khả năng xử lý nhiều loại ký tự. Do tính toàn cầu hóa của các ứng dụng, cùng một thông báo có thể cần được hiển thị bằng nhiều ngôn ngữ khác nhau; ví dụ: một ứng dụng có thể cần xuất thông báo bằng tiếng Nga, tiếng Anh, tiếng Pháp và tiếng Nhật. Bất kỳ ngôn ngữ nào trong số này đều có thể được sử dụng để tạo nội dung web với nhiều ký tự, biểu tượng cảm xúc và các biểu tượng khác. Kiểu chuỗi của Python đại diện cho các ký tự sử dụng tiêu chuẩn Unicode, cho phép các chương trình Python tương tác và xử lý tất cả các ký tự này.
Tiêu chuẩn Unicode cố gắng liệt kê tất cả các ký tự được sử dụng trong ngôn ngữ của con người; nó gán cho mỗi ký tự một mã số duy nhất. Các thông số kỹ thuật của Unicode thường xuyên được sửa đổi và cập nhật để phù hợp với các ngôn ngữ và ký hiệu mới.
Một ký tự là thành phần văn bản nhỏ nhất: ‘A,’ ‘B,’ ‘C,’ v.v. đều là các ký tự khác nhau. Các ký tự trong Unicode khác nhau tùy thuộc vào ngôn ngữ hoặc ngữ cảnh được đề cập. Ví dụ: ký tự cho chữ số La Mã một (𐌠) trông giống như ký tự viết hoa ‘I,’. Nhưng đây là hai ký tự riêng biệt với ý nghĩa hoàn toàn khác nhau.
Tiêu chuẩn Unicode xác định cách các điểm mã được sử dụng để biểu diễn các ký tự. Giá trị điểm mã là một số nguyên trong khoảng từ 0 đến 0x10FFFF (khoảng 1,1 triệu giá trị; con số thực hiện được chỉ định ít hơn giá trị đó). Vì vậy, ví dụ, điểm mã U+265E biểu thị ký tự ♞ với giá trị 0x265e trong tiêu chuẩn (9,822 ở dạng thập phân). Tương tự như vậy, ký tự “\” có điểm mã U+005C, với giá trị 0x05c theo tiêu chuẩn (92 ở dạng thập phân).
Ngày nay, Unicode đã trở thành một tiêu chuẩn trong nhiều ngôn ngữ lập trình, với nhiều ngôn ngữ (bao gồm cả Python) sử dụng nó để biểu diễn các chuỗi. Hơn nữa, nó được tất cả các nhà cung cấp phần mềm và nhà phát triển phần mềm hiện đại sử dụng như một cách chắc chắn để xử lý bất kỳ chuỗi đầu vào nào.
Cách sử dụng hàm ord() trong Python
Hàm ord() trong Python được sử dụng để chuyển đổi một ký tự Unicode thành số nguyên tương đương. Hàm chấp nhận bất kỳ ký tự chuỗi đơn nào và trả về một số nguyên. Phương thức này có cú pháp như sau:
ord(x)
Ở đây x đại diện cho bất kỳ ký tự Unicode nào.
Bây giờ, hãy xem ví dụ đầu tiên của chúng tôi bằng cách sử dụng phương pháp này:
# chuyển Unicode thành Int sử dụng ord() character = 'd' print(ord(character)) Output: 100
Hàm print() được sử dụng để xuất giá trị của ký tự Unicode của chúng ta. Nếu quá trình này có vẻ không quen thuộc.
# chuyển đổi Unicode thành Int sử dụng ord() character = "d" print(ord(character)) Output: 100
Chúng ta cũng hãy xem một ví dụ về hàm ord() với một ký tự không có trong bảng chữ cái Latinh – chẳng hạn như ký hiệu đô la:
# chuyển đổi Unicode thành Int sử dụng ord() character = '$' print(ord(character)) Output: 36
Nếu độ dài chuỗi lớn hơn 1, TypeError sẽ xuất hiện:
# chuyển đổi Unicode thành Int sử dụng ord() character = 'data' print(ord(character)) Output: TypeError: ord() expected a character, but string of length 4 found
Chúng ta có thể thấy rằng sử dụng phương thức ord() với nhiều hơn một ký tự gây ra TypeError. Điều này xảy ra vì hàm chỉ chấp nhận một ký tự duy nhất làm đầu vào. Để giải quyết TypeError này, chúng ta phải lặp lại từng ký tự trong chuỗi. Vì các chuỗi Python là các đối tượng có thể lặp lại, nên chúng ta có thể dễ dàng lặp lại các giá trị chuỗi này:
string = 'data' for letter in string: print(ord(letter)) Output: 100 97 116 97
Một điểm quan trọng cần lưu ý là 128 điểm Unicode đầu tiên giống như các giá trị ASCII. Về cơ bản, điều này có nghĩa là các ký tự và giá trị ASCII tương ứng của chúng sẽ tương đương với cùng một giá trị Unicode.
Ví dụ:
character = '9' print("giá trị ASCII của 9 =", ord(character)) Output: ASCII value of 9 = 57
Giá trị ASCII cho ký tự ‘9’ là 57; như bạn có thể thấy, giá trị này cũng tương đương với giá trị điểm Unicode của nó.
Nếu điều này có vẻ quá sức, đừng lo lắng; chúng tôi có bạn bảo hiểm. Như người xưa vẫn nói, luyện tập tạo nên sự hoàn hảo, vì vậy chúng tôi khuyên bạn nên xem bài viết này để tìm hiểu CÁCH TỐT NHẤT ĐỂ THỰC HÀNH PYTHON. Nếu bạn muốn tiến xa hơn và thực hành các kỹ năng Python của mình, chúng tôi thực sự khuyên bạn nên xem khóa học tương tác của LearnPython.com, THỰC HÀNH PYTHON: TRÒ CHƠI WORD. Nó sẽ giúp bạn thực hành các hàm ord() và chr() và làm việc tốt hơn với Unicode. Nếu bạn muốn tìm hiểu thêm về khóa học, hãy xem bài viết này về THỰC HÀNH PYTHON CỦA LEARNPYTHON: TRÒ CHƠI WORD.
Hàm chr()
Hàm Python chr() biến một biểu diễn số nguyên thành ký tự chuỗi Unicode tương đương của nó. Nói cách khác, nó ngược lại với hàm ord(). Hàm này lấy bất kỳ số nào trong khoảng từ 0 đến 1.114.111 để biểu thị tất cả các ký tự Unicode.
Cú pháp của hàm chr() trong Python như sau:
chr(i)
Trong đó tôi là một số nguyên, đại diện cho một điểm mã Unicode của một ký tự.
Ví dụ:
result = chr(102) print(result)
Nếu một giá trị nằm ngoài phạm vi được đề cập ở trên được truyền vào hàm, hàm sẽ tăng ValueError. Hãy xem nó trông như thế nào:
result = chr(1114115) print(result)
ValueError: chr() arg not in range(0x110000)
Hàm này cũng chỉ nhận một giá trị; để chuyển đổi nhiều số nguyên, chúng ta sẽ phải lặp lại tất cả các giá trị:
integers = [100, 97, 116, 97, 103, 121] for integer in integers: print(chr(integer))
Chúng ta có thể tiến xa hơn và biến danh sách các số này thành một chuỗi Python. Điều này phù hợp với văn bản của chúng ta, ‘data’, mà chúng ta đã chuyển đổi thành Unicode trong ví dụ trước. Chúng ta có thể sử dụng phương thức .join() để làm điều này:
#khai báo danh sách integers = [100, 97, 116, 97, 103, 121] result = list() # khởi tạo empty list for integer in integers: result.append(chr(integer)) # thêm characters vào result list Final = ''.join(result) #xuất ra kết quả print(result)
Ngoài chr() và ord() trong Lập trình Python
Trong ngành lập trình, chuẩn Unicode đã mang tính cách mạng. Mỗi ký tự được gán một giá trị số, từ chữ cái đến ký hiệu đến biểu tượng cảm xúc. Ngoài ra, tiêu chuẩn giúp máy tính hiểu các ký hiệu dễ dàng hơn nhiều, đặc biệt là khi nhiều ký tự được thêm vào Internet.
Chúng ta đã học được rất nhiều về hàm ord() của Python trong hướng dẫn này. Mỗi ký tự có một giá trị Unicode duy nhất và hàm ord() có thể được sử dụng để kiểm tra các giá trị số hoặc ký tự đặc biệt. Chúng ta cũng đã học về hàm chr(), hàm này ngược lại với hàm ord(). Và chúng tôi đã thấy một số ví dụ để giúp củng cố cả hai khái niệm.