Здесь есть несколько возможных точек отказа.
Сначала я бы проверил, поддерживает ли консоль указанные символы:
- если кодировка по умолчанию, используемая JVM, не поддерживает символы, они будут превращены в вопросительные знаки на
System.out
- если шрифт консоли не поддерживает символы, они не будут отображаться правильно
- если консоль декодирует байты, используя кодировку, отличную от той, к которой
System.out
кодирует их, символы не будут отображаться правильно
Вместо того, чтобы пытаться печатать символы как литералы, приведите к int
и напечатайте шестнадцатеричное значение - затем сравните значение с диаграммами Юникода .
Между браузером и сервером также может происходить потеря или неправильное преобразование. В идеале сервер должен использовать UTF-8 для кодирования и декодирования. Если кодировка, используемая браузером при кодировании данных, не поддерживает символы, они будут кодироваться с потерями; браузер обычно выбирает кодировку на основе кодировки, отправленной сервером для запроса GET (или реже из атрибута формы ). Проверьте заголовок Accept-Charset
, отправляемый с вашими данными (это можно сделать с помощью чего-то вроде Firebug или Fiddler ). Я ничего не знаю о Ру, но обязательно должен быть какой-то механизм для настройки кодировок.