Mam ciąg, który otrzymałem z aplikacji innej firmy i chciałbym wyświetlić go poprawnie w dowolnym języku przy użyciu języka C # na moim Windows Surface.
Z powodu nieprawidłowego kodowania fragment mojego ciągu wygląda tak po hiszpańsku:
Acción
podczas gdy powinno to wyglądać tak:
Acción
Zgodnie z odpowiedzią na to pytanie: Jak poznać kodowanie ciągów w C # , kodowanie, które otrzymuję, powinno już pochodzić z UTF-8, ale jest odczytywane na Encoding.Default (prawdopodobnie ANSI?).
Próbuję przekształcić ten ciąg w prawdziwy UTF-8, ale jednym z problemów jest to, że widzę tylko podzbiór klasy Encoding (tylko właściwości UTF8 i Unicode), prawdopodobnie dlatego, że jestem ograniczony do interfejsu API powierzchni systemu Windows.
Wypróbowałem kilka fragmentów, które znalazłem w Internecie, ale żaden z nich nie okazał się jak dotąd skuteczny dla języków wschodnich (tj. Koreańskiego). Oto jeden przykład:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Próbowałem również wyodrębnić ciąg do tablicy bajtów, a następnie użyć UTF8.GetString:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Czy macie jakieś inne pomysły, które mógłbym wypróbować?
Encoding.Default
zwraca stronę kodową ANSI systemu.Odpowiedzi:
Jak wiesz, nadchodzi ciąg znaków, ponieważ
Encoding.Default
możesz po prostu użyć:Kolejna rzecz, o której być może będziesz musiał pamiętać: jeśli używasz Console.WriteLine do wypisywania jakichś łańcuchów, to również powinieneś napisać
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Lub wszystkie ciągi utf8 zostaną wyprowadzone jako gbk ...źródło
Encoding.GetEncoding(...)
; będziesz musiał znaleźć nazwę rzeczywistego kodowania, które zostało nieprawidłowo użyte na drugim końcu.myString
jest to mojibake. Kod najpierw cofa nieprawidłowe dekodowanie, a następnie wykonuje właściwe dekodowanie. Działa, o ile niewłaściwe dekodowanie nie powoduje utraty danych. Ale jak zauważył @SLaks, lepiej byłoby użyć dokładnego kodowania, które było nieprawidłowe. (Lepsze nazwy i komentarze w kodzie pomogłyby w zrozumieniu, jak bardzo źle wyglądający kod jest w rzeczywistości próbą wykonania dobrze.)Wynik powinien wyglądać jak
wywołanie DecodeFromUtf8 ();
źródło
Twój kod odczytuje sekwencję bajtów zakodowanych w formacie UTF8 i dekoduje je przy użyciu kodowania 8-bitowego.
Musisz naprawić ten kod, aby zdekodować bajty jako UTF8.
Alternatywnie ( nie jest to idealne rozwiązanie ), możesz przekonwertować zły ciąg z powrotem na oryginalną tablicę bajtów - przez zakodowanie go przy użyciu nieprawidłowego kodowania - a następnie ponownie zdekodować bajty jako UTF8.
źródło
źródło
Jeśli chcesz zapisać dowolny ciąg w bazie danych mysql, zrób to: ->
Struktura pól Twojej bazy danych i phpmyadmin [lub jakikolwiek inny panel sterowania] powinna być ustawiona na utf8-gerneral-ci
2) powinieneś zmienić swój ciąg [np. textbox1.text] na bajt
2-1) zdefiniuj bajt [] st2;
2-2) przekonwertuj swój ciąg [textbox1.text] na Unicode [mmultibyte string] przez:
3) wykonaj to polecenie sql przed każdym zapytaniem:
3-2) należy teraz wstawić tę wartość do np. Pola nazwy poprzez:
4) głównym zadaniem, na które wiele rozwiązań nie zwracało uwagi, jest poniższa linia: powinieneś użyć addwithvalue zamiast dodawać parametr polecenia, jak poniżej:
++++++++++++++++++++++++++++++++++ ciesz się prawdziwymi danymi na serwerze bazy danych zamiast ????
źródło
Użyj poniższego fragmentu kodu, aby pobrać bajty z pliku CSV
Zadzwoń poniżej i zapisz jako załącznik
źródło