Chuỗi thành utf 16 python

Nó trả về một phiên bản được mã hóa utf-8 của chuỗi. Trong trường hợp thất bại, nó sẽ đưa ra một ngoại lệ UnicodeDecodeError

Tuy nhiên, phải mất hai tham số

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

ví dụ 1. Mã hóa thành mã hóa Utf-8 mặc định

# unicode string
string = 'pythön!'

# print string
print['The string is:', string]

# default encoding to utf-8

string_utf = string.encode[]

# print result print['The encoded version is:', string_utf]

đầu ra

The string is: pythön!
The encoded version is: b'pyth\xc3\xb6n!'

ví dụ 2. Mã hóa với tham số lỗi

# unicode string
string = 'pythön!'

# print string
print['The string is:', string]

# ignore error

print['The encoded version [with ignore] is:', string.encode["ascii", "ignore"]]

# replace error

print['The encoded version [with replace] is:', string.encode["ascii", "replace"]]

đầu ra

The string is: pythön!
The encoded version [with ignore] is: b'pythn!'
The encoded version [with replace] is: b'pyth?n!'

Ghi chú. Hãy thử các tham số lỗi và mã hóa khác nhau

mã hóa chuỗi

Kể từ Python 3. 0, các chuỗi được lưu dưới dạng Unicode, tôi. e. mỗi ký tự trong chuỗi được biểu thị bằng một điểm mã. Vì vậy, mỗi chuỗi chỉ là một chuỗi các điểm mã Unicode

Để lưu trữ hiệu quả các chuỗi này, chuỗi các điểm mã được chuyển đổi thành một tập hợp các byte. Quá trình này được gọi là mã hóa

Có nhiều mã hóa khác nhau xử lý một chuỗi khác nhau. Các mã hóa phổ biến là utf-8, ascii, v.v.

Sử dụng phương pháp chuỗi encode[], bạn có thể chuyển đổi chuỗi unicode thành bất kỳ. Theo mặc định, Python sử dụng mã hóa utf-8

UTF-16 [Định dạng chuyển đổi Unicode 16 bit] là mã hóa ký tự có khả năng mã hóa tất cả 1.112.064 điểm mã hợp lệ của Unicode [thực tế số điểm mã này được quy định bởi thiết kế của UTF-16]. Mã hóa có độ dài thay đổi, vì các điểm mã được mã hóa bằng một hoặc hai đơn vị mã 16 bit. UTF-16 phát sinh từ mã hóa 16 bit có độ rộng cố định đã lỗi thời trước đó, hiện được gọi là UCS-2 [đối với Bộ ký tự phổ quát 2 byte], khi rõ ràng là cần nhiều hơn 216 [65.536] điểm mã

UTF-16 được sử dụng bởi các hệ thống như Microsoft Windows API, ngôn ngữ lập trình Java và JavaScript/ECMAScript. Đôi khi nó cũng được sử dụng cho các tệp dữ liệu xử lý văn bản và văn bản thuần túy trên Microsoft Windows. Nó hiếm khi được sử dụng cho các tệp trên các hệ thống giống Unix

UTF-16 thường được cho là tiết kiệm không gian hơn UTF-8 đối với các ngôn ngữ Đông Á, vì nó sử dụng hai byte cho các ký tự chiếm 3 byte trong UTF-8. Vì văn bản thực chứa nhiều khoảng trắng, số, dấu chấm câu, đánh dấu và ký tự điều khiển, chỉ chiếm một byte trong UTF-8, nên điều này chỉ đúng đối với các khối văn bản dày đặc được xây dựng nhân tạo. [cần dẫn nguồn] Ngoài ra, GB 18030 [cũng hỗ trợ tất cả Unicode] luôn ngắn hơn UTF-16

UTF-16 là mã hóa web duy nhất không tương thích với ASCII và chưa bao giờ phổ biến trên web, nơi nó được khai báo dưới 0. 002% [hơn 1 phần nghìn của 1 phần trăm] trang web và thậm chí sau đó UTF-8 thường được sử dụng, mặc dù UTF-16 [cũng] được chỉ định [i. e. do "thông số kỹ thuật mã hóa ký tự mâu thuẫn" và/hoặc "xác định mã hóa ký tự không chính xác"]. UTF-8, bằng cách so sánh, chiếm 98% tất cả các trang web. Nhóm làm việc về công nghệ ứng dụng siêu văn bản web [WHATWG] coi UTF-8 là "mã hóa bắt buộc cho tất cả [văn bản]" và vì lý do bảo mật, các ứng dụng trình duyệt không nên sử dụng UTF-16

Nó được sử dụng bởi [tôi. e. UTF-16 có độ dài thay đổi cần thiết để hỗ trợ tất cả các ký tự biểu tượng cảm xúc, tiêu chuẩn SMS chỉ định UCS-2 có chiều rộng cố định trước đó không hỗ trợ hầu hết các ký tự đó]. [cần dẫn nguồn]

Lịch sử[sửa]

Vào cuối những năm 1980, công việc bắt đầu phát triển một mã hóa thống nhất cho "Bộ ký tự chung" [UCS] sẽ thay thế các mã hóa dành riêng cho ngôn ngữ trước đó bằng một hệ thống phối hợp. Mục tiêu là bao gồm tất cả các ký tự bắt buộc từ hầu hết các ngôn ngữ trên thế giới, cũng như các ký hiệu từ các lĩnh vực kỹ thuật như khoa học, toán học và âm nhạc. Ý tưởng ban đầu là thay thế mã hóa 256 ký tự thông thường, yêu cầu 1 byte cho mỗi ký tự, bằng mã hóa sử dụng 65.536 [216] giá trị, sẽ yêu cầu 2 byte [16 bit] cho mỗi ký tự

Hai nhóm làm việc song song với nhau, ISO/IEC JTC 1/SC 2 và Unicode Consortium, nhóm sau đại diện cho hầu hết các nhà sản xuất thiết bị máy tính. Hai nhóm đã cố gắng đồng bộ hóa các gán ký tự của họ để các mã hóa đang phát triển tương thích lẫn nhau. Mã hóa 2 byte ban đầu được gọi là "Unicode", nhưng hiện được gọi là "UCS-2"

Khi ngày càng rõ ràng rằng 216 ký tự sẽ không đủ, IEEE đã giới thiệu một không gian 31 bit lớn hơn và mã hóa [UCS-4] yêu cầu 4 byte cho mỗi ký tự. Điều này đã bị Unicode Consortium phản đối, bởi vì 4 byte cho mỗi ký tự đã lãng phí rất nhiều bộ nhớ và dung lượng ổ đĩa, và bởi vì một số nhà sản xuất đã đầu tư rất nhiều vào công nghệ 2 byte cho mỗi ký tự. Sơ đồ mã hóa UTF-16 được phát triển dưới dạng thỏa hiệp và được giới thiệu với phiên bản 2. 0 của chuẩn Unicode tháng 7 năm 1996. Nó được chỉ định đầy đủ trong RFC 2781, được xuất bản năm 2000 bởi IETF

Trong mã hóa UTF-16, các điểm mã nhỏ hơn 216 được mã hóa bằng một đơn vị mã 16 bit bằng giá trị số của điểm mã, như trong UCS-2 cũ hơn. Các điểm mã mới hơn lớn hơn hoặc bằng 216 được mã hóa bằng giá trị ghép bằng hai đơn vị mã 16 bit. Hai đơn vị mã 16 bit này được chọn từ 0xD800–0xDFFF trước đó chưa được gán cho các ký tự. Các giá trị trong phạm vi này không được sử dụng làm ký tự và UTF-16 không cung cấp cách hợp pháp nào để mã hóa chúng dưới dạng các điểm mã riêng lẻ. Do đó, luồng UTF-16 bao gồm các điểm mã 16 bit duy nhất bên ngoài phạm vi thay thế cho các điểm mã trong Mặt phẳng đa ngôn ngữ cơ bản [BMP] và các cặp giá trị 16 bit trong phạm vi thay thế cho các điểm mã trên BMP

UTF-16 được chỉ định trong các phiên bản mới nhất của cả tiêu chuẩn quốc tế ISO/IEC 10646 và Tiêu chuẩn Unicode. "UCS-2 bây giờ nên được coi là lỗi thời. Nó không còn đề cập đến một dạng mã hóa trong 10646 hoặc Tiêu chuẩn Unicode. " UTF-16 sẽ không bao giờ được mở rộng để hỗ trợ số lượng điểm mã lớn hơn hoặc để hỗ trợ các điểm mã đã được thay thế bằng điểm mã thay thế, vì điều này sẽ vi phạm Chính sách ổn định Unicode đối với danh mục chung hoặc điểm mã thay thế. [Bất kỳ sơ đồ nào vẫn là mã tự đồng bộ hóa sẽ yêu cầu phân bổ ít nhất một điểm mã BMP để bắt đầu một chuỗi. Thay đổi mục đích của một điểm mã không được phép. ]

Mô tả[sửa]

Mỗi điểm mã Unicode được mã hóa thành một hoặc hai đơn vị mã 16 bit. Cách các mã 16 bit này được lưu trữ dưới dạng byte sau đó phụ thuộc vào độ bền của tệp văn bản hoặc giao thức truyền thông

Một "ký tự" có thể cần ghi từ ít nhất là hai byte đến mười bốn byte hoặc thậm chí nhiều hơn. Chẳng hạn, một ký tự cờ biểu tượng cảm xúc chiếm 8 byte, vì nó "được tạo từ một cặp giá trị vô hướng Unicode" [và các giá trị đó nằm ngoài BMP và yêu cầu 4 byte mỗi giá trị]

U+0000 thành U+D7FF và U+E000 thành U+FFFF[sửa]

Cả UTF-16 và UCS-2 đều mã hóa các điểm mã trong phạm vi này dưới dạng các đơn vị mã 16 bit đơn lẻ bằng số với các điểm mã tương ứng. Các điểm mã này trong [BMP] là các điểm mã duy nhất có thể được biểu diễn trong UCS-2. [cần dẫn nguồn] Kể từ Unicode 9. 0, một số chữ viết hiện đại không phải là tiếng Châu Á, Trung Đông và Châu Phi nằm ngoài phạm vi này, cũng như hầu hết các ký tự biểu tượng cảm xúc

Điểm mã từ U+010000 đến U+10FFFF[sửa | sửa mã nguồn]

Các điểm mã từ các mặt phẳng khác [được gọi là ] được mã hóa thành hai đơn vị mã 16 bit được gọi là cặp thay thế, theo sơ đồ sau

Bộ giải mã UTF-16DC00DC01. DFFFD800010000010001. 0103FFD801010400010401. 0107FF⋮⋮⋮⋱⋮DBFF10FC0010FC01. 10FFFF
  • 0x10000 được trừ khỏi điểm mã [U], để lại một số 20 bit [U'] trong phạm vi số hex 0x00000–0xFFFFF. Lưu ý cho những mục đích này, U được xác định là không lớn hơn 0x10FFFF
  • Mười bit cao [trong phạm vi 0x000–0x3FF] được thêm vào 0xD800 để cung cấp đơn vị mã 16 bit đầu tiên hoặc đại diện thay thế cao [W1], sẽ nằm trong phạm vi 0xD800–0xDBFF
  • Mười bit thấp [cũng trong phạm vi 0x000–0x3FF] được thêm vào 0xDC00 để cung cấp đơn vị mã 16 bit thứ hai hoặc mã thay thế thấp [W2], sẽ nằm trong phạm vi 0xDC00–0xDFFF

Minh họa trực quan, sự phân bố của U' giữa W1 và W2 trông giống như

U' = yyyyyyyyyyxxxxxxxxxx  // U - 0x10000
W1 = 110110yyyyyyyyyy      // 0xD800 + yyyyyyyyyy
W2 = 110111xxxxxxxxxx      // 0xDC00 + xxxxxxxxxx

Đại diện thay thế cao và đại diện thấp còn được gọi là đại diện thay thế "đầu" và "theo sau", tương tự như byte đầu và byte cuối của UTF-8

Vì các phạm vi cho các ký tự thay thế cao [0xD800–0xDBFF], các ký tự thay thế thấp [0xDC00–0xDFFF] và các ký tự BMP hợp lệ [0x0000–0xD7FF, 0xE000–0xFFFF] không thể khớp với một ký tự BMP, . Điều này đơn giản hóa rất nhiều tìm kiếm. Điều đó cũng có nghĩa là UTF-16 tự đồng bộ hóa trên các từ 16 bit. liệu một đơn vị mã có bắt đầu một ký tự hay không có thể được xác định mà không cần kiểm tra các đơn vị mã trước đó [i. e. loại đơn vị mã có thể được xác định bởi phạm vi giá trị mà nó nằm trong đó]. UTF-8 chia sẻ những lợi thế này, nhưng nhiều sơ đồ mã hóa nhiều byte trước đó [chẳng hạn như Shift JIS và các mã hóa nhiều byte châu Á khác] không cho phép tìm kiếm rõ ràng và chỉ có thể được đồng bộ hóa bằng cách phân tích cú pháp lại từ đầu chuỗi. UTF-16 không tự đồng bộ hóa nếu một byte bị mất hoặc nếu quá trình truyền tải bắt đầu ở một byte ngẫu nhiên

Vì các ký tự được sử dụng phổ biến nhất đều có trong BMP nên việc xử lý các cặp thay thế thường không được kiểm tra kỹ lưỡng. Điều này dẫn đến các lỗi dai dẳng và lỗ hổng bảo mật tiềm ẩn, ngay cả trong phần mềm ứng dụng phổ biến và được đánh giá tốt [e. g. CVE-2008-2938, CVE-2012-2135]

Mặt phẳng bổ sung chứa biểu tượng cảm xúc, chữ viết lịch sử, ký hiệu ít được sử dụng, chữ tượng hình Trung Quốc ít được sử dụng hơn, v.v. Do mã hóa của Mặt phẳng bổ sung chứa 20 bit quan trọng [10 trong số 16 bit ở mỗi giá trị thay thế cao và thấp], 220 điểm mã có thể được mã hóa, được chia thành 16 mặt phẳng, mỗi mặt có 216 điểm mã. Bao gồm cả Mặt phẳng đa ngôn ngữ cơ bản được xử lý riêng, có tổng cộng 17 mặt phẳng

U+D800 thành U+DFFF[sửa]

Tiêu chuẩn Unicode dự trữ các giá trị điểm mã này cho các giá trị thay thế cao và thấp và chúng sẽ không bao giờ được gán một ký tự, vì vậy không có lý do gì để mã hóa chúng. Tiêu chuẩn Unicode chính thức nói rằng không có biểu mẫu UTF nào, kể cả UTF-16, có thể mã hóa các điểm mã này. Tuy nhiên, Windows cho phép các đại diện thay thế không ghép nối trong tên tệp và những nơi khác, điều này thường có nghĩa là chúng phải được phần mềm hỗ trợ mặc dù chúng bị loại trừ khỏi tiêu chuẩn Unicode

UCS-2, UTF-8 và UTF-32 có thể mã hóa các điểm mã này theo những cách đơn giản và rõ ràng, và một số lượng lớn phần mềm làm như vậy, mặc dù tiêu chuẩn quy định rằng các sắp xếp như vậy phải được coi là lỗi mã hóa

Có thể mã hóa rõ ràng một điểm thay thế không ghép đôi [điểm mã thay thế cao không theo sau điểm thấp hoặc điểm thấp không đi trước điểm cao] ở định dạng UTF-16 bằng cách sử dụng đơn vị mã bằng với điểm mã. Kết quả không phải là UTF-16 hợp lệ, nhưng phần lớn việc triển khai bộ mã hóa và giải mã UTF-16 thực hiện điều này sau đó khi dịch giữa các mã hóa. [cần dẫn nguồn]

Các ví dụ[sửa]

Để mã hóa U+10437 [𐐷] thành UTF-16

  • Trừ 0x10000 khỏi điểm mã, để lại 0x0437
  • Đối với đại lượng thay thế cao, dịch sang phải 10 [chia cho 0x400], sau đó thêm 0xD800, kết quả là 0x0001 + 0xD800 = 0xD801
  • Đối với chất thay thế thấp, hãy lấy 10 bit thấp [phần còn lại chia cho 0x400], sau đó thêm 0xDC00, kết quả là 0x0037 + 0xDC00 = 0xDC37

Để giải mã U+10437 [𐐷] từ UTF-16

  • Lấy đại lượng thay thế cao [0xD801] và trừ 0xD800, sau đó nhân với 0x400, kết quả là 0x0001 × 0x400 = 0x0400
  • Lấy giá trị thay thế thấp [0xDC37] và trừ 0xDC00, kết quả là 0x37
  • Cộng hai kết quả này lại với nhau [0x0437] và cuối cùng cộng 0x10000 để nhận điểm mã UTF-32 được giải mã cuối cùng, 0x10437

Bảng sau đây tóm tắt chuyển đổi này, cũng như các chuyển đổi khác. Màu sắc cho biết cách các bit từ điểm mã được phân phối giữa các byte UTF-16. Các bit bổ sung do quá trình mã hóa UTF-16 thêm vào được hiển thị bằng màu đen

Ký tự Điểm mã nhị phânBinary UTF-16UTF-16 hex
đơn vị mãUTF-16BE
byte hexUTF-16LE
hex

Sơ đồ mã hóa theo thứ tự byte[sửa | sửa mã nguồn]

UTF-16 và UCS-2 tạo ra một chuỗi các đơn vị mã 16-bit. Vì hầu hết các giao thức truyền thông và lưu trữ được xác định theo byte và do đó mỗi đơn vị chiếm hai byte 8 bit, nên thứ tự của các byte có thể phụ thuộc vào độ bền [thứ tự byte] của kiến ​​trúc máy tính

Để hỗ trợ nhận dạng thứ tự byte của các đơn vị mã, UTF-16 cho phép đánh dấu thứ tự byte [BOM], một điểm mã có giá trị U+FEFF, đứng trước giá trị được mã hóa thực tế đầu tiên. [U+FEFF là ký tự không gian không phá vỡ độ rộng bằng 0 vô hình/ZWNBSP. ] Nếu cấu trúc đầu cuối của bộ giải mã khớp với cấu trúc của bộ mã hóa, thì bộ giải mã sẽ phát hiện giá trị 0xFEFF, nhưng bộ giải mã đầu cuối ngược lại diễn giải BOM là giá trị không phải ký tự U+FFFE dành riêng cho mục đích này. Kết quả không chính xác này cung cấp một gợi ý để thực hiện hoán đổi byte cho các giá trị còn lại

Nếu BOM bị thiếu, RFC 2781 khuyến nghị sử dụng mã hóa big-endian [BE]. Trong thực tế, do Windows sử dụng thứ tự little-endian [LE] theo mặc định, nhiều ứng dụng sử dụng mã hóa little-endian. Nó cũng đáng tin cậy để phát hiện tuổi thọ bằng cách tìm kiếm các byte rỗng, với giả định rằng các ký tự nhỏ hơn U+0100 là rất phổ biến. Nếu nhiều byte chẵn hơn [bắt đầu từ 0] là null, thì đó là big-endian

Tiêu chuẩn cũng cho phép thứ tự byte được nêu rõ ràng bằng cách chỉ định UTF-16BE hoặc UTF-16LE làm loại mã hóa. Khi thứ tự byte được chỉ định rõ ràng theo cách này, BOM đặc biệt không được thêm vào trước văn bản và U+FEFF ở đầu phải được xử lý dưới dạng ký tự ZWNBSP. Hầu hết các ứng dụng đều bỏ qua BOM trong mọi trường hợp bất chấp quy tắc này

Đối với các giao thức Internet, IANA đã phê duyệt "UTF-16", "UTF-16BE" và "UTF-16LE" làm tên cho các mã hóa này [tên không phân biệt chữ hoa chữ thường]. Bí danh UTF_16 hoặc UTF16 có thể có ý nghĩa trong một số ngôn ngữ lập trình hoặc ứng dụng phần mềm, nhưng chúng không phải là tên tiêu chuẩn trong các giao thức Internet

Các ký hiệu tương tự, UCS-2BE và UCS-2LE, được sử dụng để hiển thị các phiên bản của UCS-2

UTF-16 được sử dụng cho văn bản trong API hệ điều hành của tất cả các phiên bản Microsoft Windows hiện được hỗ trợ [và bao gồm ít nhất tất cả kể từ Windows CE/2000/XP/2003/Vista/7] kể cả Windows 10. Trong Windows XP, không có điểm mã nào ở trên U+FFFF được bao gồm trong bất kỳ phông chữ nào được cung cấp cùng với Windows cho các ngôn ngữ Châu Âu. Các hệ thống Windows NT cũ hơn [trước Windows 2000] chỉ hỗ trợ UCS-2. Các tệp và dữ liệu mạng có xu hướng kết hợp các mã hóa byte UTF-16, UTF-8 và kế thừa

Mặc dù đã có một số hỗ trợ UTF-8 cho cả Windows XP, nhưng đó là [đặc biệt là khả năng đặt tên tệp bằng UTF-8] trong Windows 10 nội bộ bản dựng 17035 và bản cập nhật tháng 5 năm 2019. Kể từ tháng 5 năm 2019, Microsoft khuyến nghị phần mềm sử dụng UTF-8 thay vì mã hóa 8-bit khác. Không rõ liệu họ có khuyến nghị sử dụng UTF-8 thay vì UTF-16 hay không

Hệ điều hành IBM i chỉ định CCSID [trang mã] 13488 cho mã hóa UCS-2 và CCSID 1200 cho mã hóa UTF-16, mặc dù hệ thống coi cả hai đều là UTF-16

UTF-16 được sử dụng bởi hệ điều hành Qualcomm BREW; . môi trường NET;

Hệ điều hành Symbian được sử dụng trong điện thoại Nokia S60 và điện thoại Sony Ericsson UIQ sử dụng UCS-2. Điện thoại iPhone sử dụng UTF-16 cho Dịch vụ tin nhắn ngắn thay vì UCS-2 được mô tả trong 3GPP TS 23. 038 [GSM] và IS-637 [CDMA]

Hệ thống tệp Joliet, được sử dụng trong phương tiện CD-ROM, mã hóa tên tệp bằng UCS-2BE [tối đa sáu mươi bốn ký tự Unicode cho mỗi tên tệp]

Môi trường ngôn ngữ Python chính thức chỉ sử dụng nội bộ UCS-2 kể từ phiên bản 2. 0, nhưng bộ giải mã UTF-8 thành "Unicode" tạo đúng UTF-16. Kể từ Python 2. 2, các bản dựng Unicode "rộng" được hỗ trợ sử dụng UTF-32 thay thế; . Trăn 3. 3 không còn sử dụng UTF-16 nữa, thay vào đó, mã hóa cung cấp biểu diễn nhỏ gọn nhất cho chuỗi đã cho được chọn từ ASCII/Latin-1, UCS-2 và UTF-32

Java ban đầu sử dụng UCS-2 và đã thêm hỗ trợ ký tự bổ sung UTF-16 trong J2SE 5. 0

JavaScript có thể sử dụng UCS-2 hoặc UTF-16. Kể từ ES2015, các phương thức chuỗi và cờ biểu thức chính quy đã được thêm vào ngôn ngữ cho phép xử lý chuỗi từ góc độ mã hóa bất khả tri

Trong nhiều ngôn ngữ, các chuỗi được trích dẫn cần một cú pháp mới để trích dẫn các ký tự không phải BMP, vì cú pháp 0000 0000 0010 01005 kiểu C giới hạn rõ ràng ở 4 chữ số hex. Các ví dụ sau minh họa cú pháp cho ký tự không phải BMP "𝄞" [U+1D11E, MUSICAL SYMBOL G CLEF]

  • Phổ biến nhất [được sử dụng bởi C++, C#, D và một số ngôn ngữ khác] là sử dụng chữ hoa 'U' với 8 chữ số hex, chẳng hạn như 0000 0000 0010 01006
  • Trong Java 7 biểu thức chính quy, ICU và Perl, phải sử dụng cú pháp 0000 0000 0010 01007;
  • Trong nhiều trường hợp khác [chẳng hạn như Java bên ngoài các biểu thức chính quy], cách duy nhất để nhận các ký tự không phải BMP là nhập các nửa thay thế riêng lẻ, chẳng hạn. 0000 0000 0010 01009 cho U+1D11E

Việc triển khai chuỗi dựa trên UTF-16 thường xác định độ dài của chuỗi và cho phép lập chỉ mục theo các đơn vị mã 16 bit này, không phải theo điểm mã. Cả điểm mã và đơn vị mã đều không tương ứng với bất kỳ thứ gì mà người dùng cuối có thể nhận ra là “ký tự”;

UCS-2 cũng được hỗ trợ bởi ngôn ngữ PHP và MySQL

Swift, phiên bản 5, ngôn ngữ ứng dụng ưa thích của Apple, đã chuyển từ UTF-16 sang UTF-8 làm mã hóa ưu tiên

Mặc dù UTF-16 tiết kiệm không gian bằng một nửa so với UTF-8 đối với ASCII, nhưng nó hiệu quả hơn đối với [một số ký tự của] ngôn ngữ Đông Á, tiêu chuẩn mã hóa Unicode của Trung Quốc GB 18030 luôn tạo ra các tệp có cùng kích thước hoặc nhỏ hơn UTF-16 . Ngoài ra, các tệp ASCII có thể được giải mã [là một tập hợp con của GB 18030], tôi. e. Các ký tự ASCII được mã hóa với 1 byte cho mỗi chữ cái, không giống như UTF-16. Phải mất 2 byte cho mỗi chữ cái cho e. g. Devanagari và Bengali, trong khi ở UTF-8, chúng chiếm 3 byte

Python có sử dụng UTF không

Trăn 3. 3 không còn sử dụng UTF-16 nữa, thay vào đó, mã hóa cung cấp biểu diễn nhỏ gọn nhất cho chuỗi đã cho được chọn từ ASCII/Latin-1, UCS-2 và UTF-32. Java ban đầu sử dụng UCS-2 và đã thêm hỗ trợ ký tự bổ sung UTF-16 trong J2SE 5. 0.

Cách thay đổi UTF

Hoặc bạn có thể sử dụng UTF-16LE hoặc UTF-16BE làm tên bộ ký tự nếu bạn biết tính chất cuối của luồng byte đến từ máy chủ. Nếu bạn đã [nhầm] tạo một Chuỗi từ các byte như thể nó là UTF-8, bạn có thể chuyển đổi sang UTF-16 bằng. string = new String[chuỗi.

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

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

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

Chủ Đề