Я пытаюсь создать настраиваемый поток печати, который может печатать локализованные сообщения на консоли. Я столкнулся с проблемой, связанной с Windows. Вот то, что я пытаюсь сделатьПечать юникода на консоль
- У меня есть строки Юникод
- Преобразовать юникод строку байтов, используя UTF-8 кодировке
- Преобразование байта в новую строку с консоли кодирования
- печати новый строка для консоли с консольным кодированием
В этом коде я попытался выполнить описанные выше шаги, но это не получилось с треском. Странно, что вызов по умолчанию System.out.println работает правильно. Тем не менее, я хочу использовать собственный поток печати и не полагаться на System.out по умолчанию.
Может кто-нибудь объяснить, как я могу печатать unicode на консоли, используя мой собственный поток печати? И почему система System.out по умолчанию уже готова правильно печатать?
Вот мой код - я скомпилировал его и запустил из командной строки. Я заранее установил свой системный язык в zh-CN.
public static void main(String[] args) throws Exception{
Charset defaultCharset = Charset.defaultCharset();
System.out.println(defaultCharset);
// charset is windows-1252
String unicodeMessage =
"\u4e16\u754c\u4f60\u597d\uff01";
System.out.println(unicodeMessage);
// string is printed correctly using System.out (世界你好!)
byte[] sourceBytes = unicodeMessage.getBytes("UTF-8");
String data = new String(sourceBytes , defaultCharset.name());
PrintStream out = new PrintStream(System.out, true, defaultCharset.name());
out.println(data);
// prints gibberish: ??–????????????
}
Вы используете преобразование ошибочного кодирования OP. Вы уверены, что используете ту же кодовую страницу Windows и Charset по умолчанию? –