Sử dụng C#, tôi tìm nạp giá trị TextBox.Text
từ trang .ascx. Khi tôi so sánh sự bình đẳng của giá trị với một đối tượng chuỗi thông thường bên trong một truy vấn LINQ, nó luôn trả về false.C# - So sánh các chuỗi mã hóa khác nhau
Tôi đã đi đến kết luận rằng chúng được mã hóa khác nhau, nhưng cho đến nay không có may mắn trong việc chuyển đổi hoặc so sánh chúng.
docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8
Hai chuỗi trên là giống hệt nhau khi biểu diễn dưới dạng chữ, nhưng so sánh byte[]
họ rõ ràng là khác nhau do sự mã hóa.
Tôi đã thử rất nhiều thứ khác nhau, chẳng hạn như:
System.Text.Encoding.Default.GetString(utf8.GetBytes(fetchedVal));
nhưng điều đó sẽ trả về giá trị "Testdoc 1.docx"
.
Nếu tôi thay vì cố gắng
System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(fetchedVal));
nó trả "Testdoc 1.docx"
nhưng một Equals()
-Kiểm tra vẫn trả false
.
Tôi cũng đã thử những điều sau đây, mà dường như là cách tiếp cận đề nghị, nhưng không có may mắn:
byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);
Thủ phạm dường như là khoảng trắng, bởi vì khi kiểm tra các chuỗi byte nó luôn luôn byte thứ bảy khác nhau.
Làm thế nào để bạn chuyển đổi đúng từ UTF-8 thành mã hóa chuỗi mặc định trong C#?
Tôi không chắc chính xác vấn đề ở đây là gì, nhưng tôi muốn chỉ cho bạn chức năng Bình thường hóa chuỗi. Không biết nếu điều này sẽ khắc phục được sự cố của bạn, nhưng có thể hữu ích cho bạn để bình thường hóa các chuỗi trước khi so sánh chúng. http://msdn.microsoft.com/en-us/library/system.string.normalize(v=vs.110).aspx –
Xem câu trả lời của @SLaks, điều này không liên quan đến việc mã hóa. Trong .NET, tất cả các chuỗi đều bằng nhau, cụ thể là mã hóa Unicode trong UTF-16. Thủ phạm ở đây là một không gian không phá vỡ, xem [HTML encoding issues - "Â" ký tự hiển thị thay vì " "] (http://stackoverflow.com/questions/1461907/html-encoding-issues-%C3% 82-ký tự hiển thị-thay-cho-nbsp). Văn bản này ở đâu trong hộp văn bản của bạn được dán từ và văn bản đó được xuất ra như thế nào? – CodeCaster
Cũng giống như một phản ứng với @DavidS., Tôi đã khám phá chức năng 'Normalize', nhưng không thành công. @CodeCaster, 'TextBox.Text' được đặt từ JQuery. Tôi nhớ thực tế là nó có thể là do điều đó! –