2012-04-27 36 views

Trả lời

5

System.Stringdocumented sử dụng UTF-16 trong nội bộ.

4

Đây là một chi tiết thực hiện bạn nên không cần phải lo lắng về (trừ khi bạn rời khỏi Basic Multilingual Plane, trong trường hợp mọi thứ trở nên phức tạp kể từ Chars represent UTF-16 code units).

Khi nó trở nên có liên quan, ví dụ, khi chuỗi được chuyển thành một mảng byte, bạn phải chọn mã hóa để sử dụng:

Dim S1 As String = ... 

Dim utf8Bytes = Encoding.UTF8.GetBytes(S1) 
Dim utf16Bytes = Encoding.Unicode.GetBytes(S1) 

Dim western As New Encoding(1252) 
Dim westernBytes = western.GetBytes(S1) 
+0

Nó trở thành cách có liên quan sớm hơn thế. Hãy thử gắn một nhân vật từ bên ngoài BMP vào một chuỗi và lấy nó ra bằng cách giải quyết các ký tự từ chuỗi. UTF-16 trong .NET bị rò rỉ khắp nơi, đặc biệt nhất trong đó 'System.Char' rộng 16 bit và do đó không thể giữ tất cả các ký tự (đại diện cho mã * đơn vị *, không phải là mã * điểm *). Điều này trái ngược với Python nơi mã hóa nội bộ có thể là nhiều thứ khác nhau nhưng bạn được đảm bảo rằng bạn sẽ không nhận thấy từ việc sử dụng các chuỗi Unicode. Trong .NET bạn sẽ nhận thấy ngay khi bạn rời khỏi BMP. – Joey

+0

@Joey: "BMP" là gì? – Heinzi

+0

Máy bay đa ngôn ngữ cơ bản. I E. 65536 điểm mã Unicode đầu tiên trong đó các ký tự có thể được giải quyết trong một đơn vị mã UTF-16 đơn lẻ. – Joey

Các vấn đề liên quan