Mam problem, gdy próbuje konwertować bajtów do String w Javie, z kodem jak:Co dzieje się pod maską, gdy bajty są konwertowane na String w Javie?
byte[] bytes = {1, 2, -3};
byte[] transferred = new String(bytes, Charsets.UTF_8).getBytes(Charsets.UTF_8);
i oryginalne bajtów nie są takie same jak te przesyłane bajty, które są odpowiednio
[1, 2, -3]
[1, 2, -17, -65, -67]
Kiedyś myślałem, że jest to spowodowane mapowaniem zestawu znaków UTF-8 dla negatywu "-3". Więc zmienię go na "-32". Ale przeniesiona tablica pozostaje taka sama!
[1, 2, -32]
[1, 2, -17, -65, -67]
Więc zdecydowanie chce wiedzieć dokładnie, co się dzieje, gdy zgłoszę new String (bajtów) :)
Skąd wziął się 1, 2, -3? Czy to jest nawet poprawne UTF-8? – Necreaux
Należy pamiętać, że patrzysz na numeryczną reprezentację bajtów zgodnie z Javą, w której wszystko jest podpisane. Wartość wydrukowana jako -3 jest w rzeczywistości 8-bitową wartością 0xFD lub 0b11111101. –
Ponieważ bajt 0xFD odpowiada pierwszemu bajtowi kilku punktów arabskich prezentacji kodu A, może on rozszerzyć jeden z nich do odpowiedniej sekwencji UTF-8. Większość arabskich formularzy prezentacji rozwiązuje 3 bajty w UTF-8. –