2011-07-01 23 views
12

Tôi có một mảng byte: 00 01 00 00 00 12 81 00 00 01 00 C8 00 00 00 00 00 08 5C 9F 4F A5 09 45 D4 CEWhats đang xảy ra với mảng byte này?

Nó được đọc qua StreamReader sử dụng UTF8 encoding

// Note I can't change this code, to many component dependent on it. 
using (StreamReader streamReader = 
    new StreamReader(responseStream, Encoding.UTF8, false)) 
{ 
    string streamData = streamReader.ReadToEnd(); 
    if (requestData.Callback != null) 
    { 
     requestData.Callback(response, streamData); 
    } 
} 

Khi chức năng chạy tôi nhận được sau đây trả lại cho tôi (tôi chuyển đổi sang một mảng byte)

00 01 00 00 00 12 EF BF BD 00 00 01 00 EF BF BD 00 00 00 00 00 08 5C EF BF BD 4F EF BF BD 09 45 EF BF BD

Bằng cách nào đó tôi cần lấy lại những gì đã trả lại cho tôi và đưa nó trở lại đúng mã hóa và mảng byte phải, nhưng tôi đã thử rất nhiều.

Xin lưu ý, tôi đang làm việc với API giới hạn WP7.

Hy vọng các bạn có thể giúp đỡ.

Cảm ơn!

Update để được giúp đỡ ...

nếu tôi đoạn mã sau, nó gần như ngay, chỉ có điều đó là sai là 5 đến byte cuối cùng được tách ra.

byte[] writeBuf1 = System.Text.Encoding.UTF8.GetBytes(data); 
        string buf1string = System.Text.Encoding.BigEndianUnicode.GetString(writeBuf1, 0, writeBuf1.Length); 
        byte[] writeBuf = System.Text.Encoding.BigEndianUnicode.GetBytes(buf1string); 
+0

Bạn có thể hiển thị cho chúng tôi mã viết/tạo mảng không? –

+0

Không, nó đến từ một dịch vụ của bên thứ ba, đó là dữ liệu chính xác mà dịch vụ trả về ... Bên cạnh đó, tôi chỉ muốn đưa nó trở lại những gì nó được cho là (như nó đứng trong dòng phản ứng) – John

+0

Tôi nghiêm túc boggled trên này ... – John

Trả lời

26

Mảng byte gốc là không được mã hóa là UTF-8. Do đó, StreamReader thay thế từng byte không hợp lệ bằng ký tự thay thế U + FFFD. Khi ký tự đó được mã hóa trở lại thành UTF-8, kết quả này theo chuỗi byte EF BF BD. Bạn không thể xây dựng giá trị byte ban đầu từ chuỗi vì thông tin bị mất hoàn toàn.

+0

Đó là những gì tôi đã sợ ... Vì vậy, cách duy nhất để thực sự không mất dữ liệu là tìm ra mã hóa và đọc như thế nào? Thật không may, vì một số lý do tôi không thể chỉ đọc một mảng byte, Stream yêu cầu một streamreader để đọc ... – John

+0

Có, và khi bạn đang nghi ngờ, sử dụng 'ISO-8859-1', vì vậy bạn sẽ nhận được một đơn giản Lập bản đồ 1: 1 từ byte thành ký tự. Chỉ cần cho sự tò mò: Tại sao bất cứ ai muốn đọc một dòng byte như thế này (mà rõ ràng là dữ liệu phi ký tự) như là một dòng nhân vật? –

+0

Bạn không thể yêu cầu nguồn của luồng cho một đặc điểm kỹ thuật? –

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