2012-08-24 10 views
6

Ho un progetto Blackberry su cui sto lavorando e ho bisogno di convertire array di byte di stringhe codificate usando UTF-16LE (little endian) in una serie di stringhe di byte nel Codifica UTF-16BE (big endian) e vis. versa. Un server a cui mi sto collegando sta inviando le matrici di stringhe di stringhe di dispositivi BlackBerry nella codifica UTF-16LE, tuttavia il dispositivo non supporta nativamente UTF-16LE. Quando provo a decodificare gli array di byte in stringhe, le stringhe sono illeggibili. Il dispositivo, tuttavia, supporta UTF-16BE. Devo anche invertire questo processo, cioè convertire una matrice di byte di una stringa con la codifica UTF-16BE in ciò che il server si aspetta (UTF-16LE). Grazie.UTF-16BE a UTF-16LE e ritorno

I non può fare questo sul dispositivo:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16LE");// throws UnsupportedEncodingException 

I può farlo:

String test = "test"; 
byte[] testBytes = test.getBytes("UTF-16BE");//works 
+0

Cosa ottieni se usi solo 'byte [] testBytes = test.getBytes (" UTF-16 ")'? Il tuo server inserisce il carattere BOM corretto all'inizio della stringa e Blackberry rileva automaticamente big endian? – HeatfanJohn

+0

@HeatfanJohn test.getBytes ("UTF-16") genera anche un'eccezione. Non sono sicuro che il server inserisca la distinta base all'inizio della stringa. È un server ADFS ASP.Net (se questo aiuta). BlackBerry non rileva automaticamente. Grazie. – RyanM

risposta

11

UTF-16 utilizza due byte per codeunit, con alcune codepoints Unicode codificati usando una codeunit e altri codepoint usando due codeunits (chiamate una coppia surrogata).

Per convertire tra UTF-16LE e UTF-16BE, è sufficiente scorrere i byte scambiando l'ordine di ciascuna coppia di 2 byte di ciascuna unità di codice. L'ordine delle codeunita surrogate non cambia tra LE e BE. IOW, scambia semplicemente i byte 0 e 1 tra loro, scambia i byte 2 e 3 l'uno con l'altro e così via.

+0

Capisco. Ci proverò e riferirò. Grazie! – RyanM

+0

Ha funzionato! Grazie molto. – RyanM

Problemi correlati