Mam ciąg znaków „ñ” i mam z tym pewne problemy. Muszę zakodować ten ciąg do kodowania UTF-8. Próbowałem w ten sposób, ale to nie działa:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
Jak zakodować ten ciąg do utf-8?
{In,Out}putStream{Read,Writ}ers
to zrobić. Zastanawiam się dlaczego?Odpowiedzi:
String
obiekty w Javie używają kodowania UTF-16, którego nie można modyfikować.Jedyne, co może mieć inne kodowanie, to
byte[]
. Więc jeśli potrzebujesz danych UTF-8, potrzebujeszbyte[]
. Jeśli masz plik,String
który zawiera nieoczekiwane dane, oznacza to, że problem występuje w pewnym wcześniejszym miejscu, które nieprawidłowo przekonwertowało niektóre dane binarne naString
(tj. Używało nieprawidłowego kodowania).źródło
byte[]
, ale nie ma sensuString
(chyba że kodowanie to UTF-16, w którym to przypadku ma sens, ale nadal zawiera niepotrzebne informacje).String objects in Java use the UTF-16 encoding that can't be modified.
Czy masz oficjalne źródło tego cytatu?Co powiesz na korzystanie
źródło
myString.getBytes(Charsets.UTF_8)
i bajty -> String:new String(myByteArray, Charsets.UTF_8)
.StandardCharsets.UTF_8
. Dostępne w Javie 1.7+.W Javie 7 możesz używać:
Ma to tę zaletę
getBytes(String)
, że nie deklarujethrows UnsupportedEncodingException
.Jeśli używasz starszej wersji Java, możesz samodzielnie zadeklarować stałe zestawu znaków:
źródło
String value = new String(myString);
.Użyj
byte[] ptext = String.getBytes("UTF-8");
zamiastgetBytes()
.getBytes()
używa tak zwanego „domyślnego kodowania”, którym może nie być UTF-8.źródło
Łańcuch Java jest wewnętrznie zawsze zakodowany w UTF-16 - ale naprawdę powinieneś o tym pomyśleć w ten sposób: kodowanie jest sposobem na translację między ciągami i bajtami.
Więc jeśli masz problem z kodowaniem, do czasu, gdy masz String, jest już za późno, aby to naprawić. Musisz naprawić miejsce, w którym tworzysz ten ciąg z pliku, bazy danych lub połączenia sieciowego.
źródło
Możesz spróbować w ten sposób.
źródło
Po chwili przeszedłem przez ten problem i udało mi się go rozwiązać w następujący sposób
najpierw muszę zaimportować
Potem musiałem zadeklarować stałą w użyciu
UTF-8
iISO-8859-1
Następnie mógłbym użyć go w następujący sposób:
źródło
i jeśli chcesz czytać z pliku tekstowego z kodowaniem „ISO-8859-1”:
źródło
Używam poniższego kodu do kodowania znaku specjalnego poprzez określenie formatu kodowania.
źródło
Szybki przewodnik krok po kroku, jak skonfigurować domyślne kodowanie NetBeans UTF-8. W rezultacie NetBeans utworzy wszystkie nowe pliki w kodowaniu UTF-8.
NetBeans domyślnie koduje UTF-8 krok po kroku
Przejdź do folderu etc w katalogu instalacyjnym NetBeans
Edytuj plik netbeans.conf
Znajdź wiersz netbeans_default_options
Dodaj -J-Dfile.encoding = UTF-8 w cudzysłowie wewnątrz tego wiersza
(przykład
netbeans_default_options="-J-Dfile.encoding=UTF-8"
:)Uruchom ponownie NetBeans
Ustawiłeś domyślne kodowanie NetBeans UTF-8.
Twoje opcje netbeans_default_options mogą zawierać dodatkowe parametry w cudzysłowie. W takim przypadku dodaj -J-Dfile.encoding = UTF-8 na końcu ciągu. Oddziel go spacją od innych parametrów.
Przykład:
tutaj jest link do dalszych szczegółów
źródło
To rozwiązało mój problem
źródło