Печать символов Юникода в Java
Отображение unicode
символ в java показывает "?" знак. Например, я попытался напечатать "अ". это unicode
Число: U+0905, а html-представление - "& # 2309;". Ниже коды печатает "?" вместо unicode
персонаж.
char aa = '\u0905';
String myString = aa + " result" ;
System.out.println(myString); // displays "? result"
Есть ли способ отображения unicode
персонаж прямо из unicode
сам без использования unicode
номера? т.е. "अ" сохраняется в файле, теперь отображать файл в формате jsp.
5 ответов
Java определяет два типа потоков, байтовый и символьный.
Основная причина, по которой System.out.println() не может отображать символы Unicode, заключается в том, что System.out.println() - это поток байтов, который обрабатывает только младшие восемь битов символа, который является 16-битным.
Чтобы иметь дело с символами Unicode (16-разрядный символ Unicode), вы должны использовать символьный поток, например PrintWriter.
PrintWriter поддерживает методы print() и println (). Таким образом, вы можете использовать эти методы так же, как вы использовали их с System.out.
PrintWriter printWriter = new PrintWriter(System.out,true);
char aa = '\u0905';
printWriter.println("aa = " + aa);
Ваш myString
переменная содержит совершенно правильное значение. Проблема должна быть выходной System.out.println(myString)
который должен посылать несколько байтов в некоторый вывод, чтобы показать глифы, которые вы хотите увидеть.
System.out
это PrintStream, использующий "кодировку платформы по умолчанию" для преобразования символов в последовательности байтов - возможно, ваша платформа не поддерживает этот символ. Например, на моем компьютере с Windows 7 в Германии кодировка по умолчанию - CP1252, и в этой кодировке нет последовательности байтов, соответствующей вашему персонажу.
Или, может быть, кодировка правильная, но просто шрифт, который создает графические символы из символов, не имеет этого символа.
Если вы отправляете свой вывод в окно Windows CMD.EXE, то, возможно, применимы обе причины.
Но будьте уверены, что ваша строка верна, и если вы отправите ее в пункт назначения, который может ее обработать (например, Swing JTextField), она будет отображаться правильно.
Попробуйте использовать набор символов utf8 -
Charset utf8 = Charset.forName("UTF-8");
Charset def = Charset.defaultCharset();
String charToPrint = "u0905";
byte[] bytes = charToPrint.getBytes("UTF-8");
String message = new String(bytes , def.name());
PrintStream printStream = new PrintStream(System.out, true, utf8.name());
printStream.println(message); // should print your character
Юникод — это уникальный код, который используется для печати любого символа или символа.
Вы можете использовать юникод из --> https://unicode-table.com/en/
Ниже приведен пример печати символа в Java.
package Basics;
/**
*
* @author shelc
*/
public class StringUnicode {
public static void main(String[] args) {
String var1 = "Cyntia";
String var2 = new String(" is my daughter!");
System.out.println(var1 + " \u263A" + var2);
//printing heart using unicode
System.out.println("Hello World \u2665");
}
}
******************************************************************
OUTPUT-->
Cyntia ☺ is my daughter!
Hello World ♥
Я столкнулся с той же проблемой с Eclipse. Я решил свою проблему, переключив формат кодирования для консоли с ISO-8859-1 на UTF-8. Вы можете сделать это в меню Run / Run Configurations / Common.
https://eclipsesource.com/blogs/2013/02/21/pro-tip-unicode-characters-in-the-eclipse-console/