mam do czynienia z zewnętrznym usługi internetowej, która daje mi nieprawidłowo zakodowany (i lub uszkodzone) Struny (UTF-8
), które były najprawdopodobniej albo ISO LATIN
lub WINDOWS-1252
ale teraz UTF-8
(i lub mieszanina ISO/WINDOWS/UTF-8). Piękne kapelusze (Â
) obfitują.biblioteki Java, aby naprawić nieprawidłowo zakodowany tekst za pomocą heurystyki
Oczywiście nie mogę ustalić, w jaki sposób zewnętrzna usługa sieciowa przechowuje ciągi, aby informacje zostały utracone. Tak więc nadzieje na 100% tłumaczenie, które znam, nie są możliwe.
Ale miałem nadzieję, że ktoś napisał heurystyczną bibliotekę odwzorowań postaci w Javie (jest mało prawdopodobne, że ktoś mógłby ją wpisać).
Jeśli nie myślę, że może to faceci portu kod PHP: https://stackoverflow.com/a/3521340/318174
UPDATE i Objaśnienie: Prosta konwersja jak @VGR odpowiedział nie będzie działać. Nie mam oryginalnych bajtów. Dane zostały niepoprawnie przekonwertowane w punkcie końcowym (serwer SOAP prawdopodobnie wykonał getBytes(/*with out correct encoding*/)
lub może dane są przechowywane w niewłaściwym formacie). Podczas konwersji bajtów na ciągi znaków w języku Java z powrotem dane nie są zachowywane, chyba że kodowanie jest wszędzie takie samo. Jest to łatwe do zrozumienia, jeśli myślisz o czymś takim, jak ASCII
< -> . Z Windows-1252
lub ISO Latin
jest to znacznie bardziej skomplikowane, ponieważ dane nie są tracone, ale często mylone. Dzieje się tak dlatego, że te kodowania mogą mieć dwa bajty i nie stanowią podzbioru UTF-8
.
Jeśli nie wierzysz, możesz spróbować zrobić getBytes()
z różnymi kodowaniami i zobaczysz uszkodzenie danych i utratę danych.
nie powinienem pozwolić przeszkadza mi, ale to zawsze denerwuje mnie, kiedy ktoś głosów zamknąć z zewnątrz pisanie komentarz. –