Próbuję odzyskać niektóre chińskie znaki UT-8 uni z bazy danych przy użyciu pliku Java. Kiedy to robię, znaki są zwracane jako znaki zapytania.
Jednak gdy wyświetlam znaki z bazy danych (używając select * from ...
) znaki są wyświetlane normalnie. Kiedy drukuję ciąg znaków w pliku Java składającym się z chińskich znaków, są one również drukowane normalnie.
Miałem ten problem w Eclipse: kiedy uruchomiłem program, znaki były drukowane jako znaki zapytania. Jednak ten problem został rozwiązany, gdy zapisałem plik Java w formacie utf-8.
Uruchomienie „ustawień regionalnych” w terminalu obecnie zwraca to:
LANG="en_GB.utf-8"
LC_COLLATE="en_GB.utf-8"
LC_CTYPE="en_GB.utf-8"
LC_MESSAGES="en_GB.utf-8"
LC_MONETARY="en_GB.utf-8"
LC_NUMERIC="en_GB.utf-8"
LC_TIME="en_GB.utf-8"
LC_ALL=
Próbowałem również skompilować mój plik Java za pomocą tego:
javac -encoding utf-8 [java file]
Ale nadal wynikiem są znaki zapytania.
To dość dziwne, jak czasami wyświetla znaki. Czy ktoś ma na to wytłumaczenie? A nawet lepiej, jak to naprawić, aby znaki były poprawnie wyświetlane?
Odpowiedzi:
4 dla odpowiedzi № 1The System.out
printstream nie jest tworzony jako strumień wydruku utf-8. Możesz go przekonwertować na taki:
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
public class JavaTest {
public static void main(String[] args) {
try{
PrintStream out = new PrintStream(System.out, true, "utf-8");
out.println("Hello");
out.println("施华洛世奇");
out.println("World");
}
catch(UnsupportedEncodingException UEE){
//Yada yada yada
}
}
}
Możesz również ustaw domyślne kodowanie zgodnie z tutaj przez:
java -Dfile.encoding=utf-8 -jar JavaTest.jar