ho a che fare con un servizio esterno web che mi sta dando modo errato codificato (e o danneggiati) Corde (UTF-8
) che erano più probabile sia ISO LATIN
o WINDOWS-1252
ma sono ora UTF-8
(e o una miscela di ISO/WINDOWS/UTF-8). I cappelli Lovely A (Â
) abbondano.libreria Java per risolvere in modo non corretto il testo codificato usando euristiche
Ovviamente non è possibile risolvere il modo in cui il servizio Web esterno memorizza le stringhe in modo da perdere le informazioni. Quindi le speranze di una traduzione al 100% che conosco non sono possibili.
Ma speravo che qualcuno avesse scritto una libreria di mappatura dei caratteri euristica in Java (è improbabile che qualcuno possa digitare A cappelli).
Se non Credo di poter porta questo ragazzi codice PHP: https://stackoverflow.com/a/3521340/318174
UPDATE e spiegazione: una semplice conversione come @VGR risposto con non funzionerà. Non ho i byte originali. I dati sono stati convertiti in modo errato sull'endpoint (il server SOAP potrebbe essere stato getBytes(/*with out correct encoding*/)
o forse i dati sono stati memorizzati nel formato non corretto). Quando convertite i byte in stringhe in Java, i dati non vengono conservati a meno che la codifica non sia la stessa ovunque. Questo è facile da capire se pensi a qualcosa come ASCII
< ->UTF-8
. Con Windows-1252
o ISO Latin
è molto più complicato perché i dati non vengono persi, ma spesso confusi. Questo perché tali codifiche possono essere due byte e non sono un sottoinsieme di UTF-8
.
Se non mi credi, puoi provare a fare getBytes()
indietro con varie codifiche e vedrai la corruzione dei dati e la perdita di dati.
non dovrei lasciare che mi dà fastidio, ma mi infastidisce sempre quando qualcuno voti per chiudere con la scrittura di un commento. –