Poszukałem w Google na ten temat i sprawdziłem każdą odpowiedź, ale nadal jej nie rozumiem.
Zasadniczo muszę przekonwertować ciąg UTF-8 na ISO-8859-1 i robię to za pomocą następującego kodu:
Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
string msg = iso.GetString(utf8.GetBytes(Message));
Mój ciąg źródłowy to
Message = "ÄäÖöÕõÜü"
Niestety, mój ciąg wynikowy to
msg = "�ä�ö�õ�ü
Co tu robię źle?
Encoding.Unicode
i w Win32 API. Unicode to zestaw znaków, a nie kodowanie. UTF-16 jest jednym z kilku kodowań Unicode.)
Message
został zdekodowany z UTF-8. Zakładając, że ta część działała poprawnie, konwersja na Latin-1 jest tak prosta jak byte[] bytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(Message)
. Następnie, jak mówi StuS, możesz przekonwertować bajty Latin-1 z powrotem na UTF-16 za pomocąEncoding.GetEncoding("ISO-8859-1").GetString(bytes)