2009-07-29 47 views
6

Tôi nhận được một thông điệp unicode qua mạng, trông giống như:C# đọc unicode?

74 00 65 00 73 00 74 00 3F 00

Tôi đang sử dụng BinaryReader để đọc các dòng từ ổ cắm của tôi, nhưng vấn đề là nó không cung cấp một chức năng "ReadWideString", hoặc một cái gì đó tương tự như nó. Bất cứ ai một ý tưởng làm thế nào để đối phó với điều này?

Cảm ơn!

Trả lời

14

Đơn giản!

string str = System.Text.Encoding.Unicode.GetString(array); 

trong đó array là mảng byte của bạn.

+0

Cảm ơn! Có nó làm việc, nhờ những người khác quá. –

7

Các chuỗi trong C# là Unicode theo mặc định. Hãy thử

string converted = Encoding.Unicode.GetString(data); 

trong đó dữ liệu là mảng byte [] chứa dữ liệu Unicode của bạn. Nếu dữ liệu của bạn lớn, bạn có thể thử

string converted = Encoding.BigEndianUnicode.GetString(data); 
+0

Mỗi byte mỗi 2 bằng 0, không phải là nó là utf-8. –

5

Bạn có thể sử dụng một StreamReader như thế này:

StreamReader sr = new StreamReader(stream, Encoding.Unicode); 

Nếu luồng của bạn chỉ chứa dòng văn bản sau đó StreamReader là phù hợp hơn so BinaryReader. Nếu chuỗi của bạn được nhúng vào bên trong dữ liệu nhị phân thì có lẽ tốt hơn là giải mã chuỗi bằng cách sử dụng phương thức Encoding.GetString như những người khác đã đề xuất