Gần đây chúng tôi đã xem một số mã mẫu từ một nhà cung cấp để băm khóa bí mật cho cuộc gọi dịch vụ web, mẫu của họ là trong VB.NET mà chúng tôi đã chuyển đổi thành C#. Điều này gây ra băm để tạo ra đầu vào khác nhau. Nó chỉ ra cách họ đã tạo ra chìa khóa cho việc mã hóa bằng cách chuyển đổi một mảng char thành một chuỗi và trở lại một mảng byte. Điều này dẫn tôi đến khám phá rằng VB.NET và bộ mã hóa mặc định của C# hoạt động khác với một số ký tự.Tại sao Encoding.Default.GetBytes() trả về các kết quả khác nhau trong VB.NET và C#?
C#:
Console.Write(Encoding.Default.GetBytes(new char[] { (char)149 })[0]);
VB:
Dim b As Char() = {Chr(149)}
Console.WriteLine(Encoding.Default.GetBytes(b)(0))
C# đầu ra là 63, trong khi VB là giá trị byte đúng 149. nếu bạn sử dụng bất kỳ giá trị khác, như 145, vv , kết quả đầu ra phù hợp.
Đi bộ qua gỡ lỗi, cả bộ mã hóa mặc định VB và C# là SBCSCodePageEncoding.
Có ai biết tại sao điều này không?
Tôi đã sửa mã mẫu bằng cách trực tiếp khởi tạo một mảng byte, mà nó phải có ở vị trí đầu tiên, nhưng tôi vẫn muốn biết lý do tại sao bộ mã hóa không phải là ngôn ngữ cụ thể, có vẻ như vậy.
Dưới đây là một liên kết đến tài liệu: http://msdn.microsoft .com/vi-us/library/613dxh46 (VS.80) .aspx –
Chúc mừng Jon- Tôi chỉ đang trong quá trình thêm liên kết. – RichardOD
Cảm ơn! Tôi đã nghĩ rằng nó có một cái gì đó để làm với Chr() bit, nhưng tôi đã không chắc chắn làm thế nào để tránh sử dụng Chr() trong VB.NET. – Annagram