Как правильно отобразить строку с кириллицей? - PullRequest
1 голос
/ 30 мая 2009

В Mac OS X 10.5 с Java 1.5 у меня есть этот фрагмент кода.

public static void main(String[] args) {
    String name = "Алексей";
    System.out.println("name = " + name);
}

Вывод:

name = ???????

Я ожидал увидеть:

name = Алексей

Как я могу это сделать?

Ответы [ 4 ]

5 голосов
/ 30 мая 2009

Здесь есть две потенциальные проблемы. Во-первых, в вашем исходном коде есть кириллические символы. Это означает, что вы должны убедиться, что кодировка, которую вы использовали для хранения файла, была такой же, как кодировка, используемая компилятором. Посмотрите справочную страницу javac , чтобы узнать, какая у нее кодировка по умолчанию и / или как указать конкретную кодировку. Или используйте Unicode в вашей строке.

Вторая возможность заключается в том, что ваш терминальный шрифт не отображает символы кириллицы. Однако я не думаю, что это именно то, что происходит, поскольку (1) вы можете видеть символы в исходном коде и (2) я считаю, что отсутствующие глифы отображаются как блоки, а неправильные кодировки - как вопросительные знаки.

Для проверки просто замените строку на правильные экранированные символы Юникода и убедитесь, что символы отображаются на экране.

3 голосов
/ 30 мая 2009

Если вы используете класс Console вместо System.out и вам действительно очень повезло, вы MIGHT сможете заставить консоль печатать символы кириллицы.

Но в целом консоли не имеют хорошей поддержки набора символов.

Было бы намного надежнее вывести вашу строку другим способом, например печать его в компонент Swing.

2 голосов
/ 31 мая 2009

Спасибо всем за полезные идеи.

Оказывается, ключом к моей проблеме было следующее предложение:

На Mac OS X 10.5 с Java 1.5, у меня есть этот фрагмент кода

В IDE, которую я использую, IntelliJ IDEA явно устанавливал кодировку файла в MacRoman. Изменяя кодировку для проекта на UTF-8, проблема была решена без каких-либо изменений кода.

1 голос
/ 31 мая 2009

Если ваша строка динамически получена откуда-то, и вам нужно убедиться, что она закодирована так, как вам нужно, используйте некоторые конструкторы класса String, которые принимают тип Charset в качестве параметра для преобразования этой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...