Tôi đã googled về chủ đề này và tôi đã xem xét mọi câu trả lời, nhưng tôi vẫn không hiểu.C# Chuyển đổi chuỗi từ UTF-8 sang ISO-8859-1 (Latin1) H
Về cơ bản tôi cần phải chuyển đổi UTF-8 chuỗi ISO-8859-1 và tôi làm điều đó bằng đoạn mã sau:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
chuỗi nguồn của tôi là
Message = "ÄäÖöÕõÜü"
Nhưng tiếc là chuỗi kết quả của tôi trở thành
msg = "�ä�ö�õ�ü
Tôi đang làm gì sai ở đây?
Tất cả các chuỗi trong .NET lưu trữ chuỗi bằng ký tự unicode. Không có khái niệm về một String là "windows-1252", "iso-8859-1", "utf-8", v.v. Bạn đang cố gắng vứt bỏ bất kỳ ký tự nào trong chuỗi của bạn mà không có biểu diễn trong Windows -1252 trang mã? –
@IanBoyd Trên thực tế, một [String] (https://msdn.microsoft.com/en-us/library/system.string (v = vs.110) .aspx) là một chuỗi được đếm các đơn vị mã UTF-16. (Thật không may, thuật ngữ Unicode đã được áp dụng sai trong 'Encoding.Unicode' và trong API Win32. Unicode là một bộ ký tự, không phải là mã hóa. UTF-16 là một trong một số mã hóa cho Unicode.) –
Bạn thực hiện hành động không chính xác: bạn tạo mảng byte trong mã hóa utf8, nhưng đọc chúng bằng giải mã iso. Nếu bạn muốn tạo chuỗi ký tự được mã hóa, nó gọi đơn giản ** string msg = iso.GetString (iso.GetBytes (Message)); ** – StuS