Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.208.172.3] |
|
Сообщ.
#1
,
|
|
|
Доброго времени суток. Подскажите, пожалуйста в чем ошибка.
Мне (в целях саморазвития) необходимо, чтобы отображалась дата в немецком формате (месяц март обозначается по немецки с использованием умлаута ä), а также при работе программы могли отображаться кирилические символы, да и вообще символы любой другой страны или нескольких стран. Просто хочется научиться таким возможностям работы с символьными данными. Проблема состоит в том, что при использовании команды консоли chcp 850 не отображается кирилица (умлаут при этом отображается правильно), а при использовании кодовой страницы 866 или 1251 не отображается немецкий умлаут в названии месяца март (вся кирилица и латиница отображаются). После этого я доработал код по рекомендациям найденным в сети: import java.util.*; import java.text.*; import java.io.*; public class RandomDate { public static void main(String[] args) { PrintStream onMonitorOut = null; PrintStream onMonitorErr = null; try { if(System.getProperty("os.name").toLowerCase().contains("windows")) { onMonitorOut = new PrintStream(System.out,true,"Cp850"); onMonitorErr = new PrintStream(System.err,true,"Cp850"); System.setOut(onMonitorOut); System.setErr(onMonitorErr); Date curentDate = new Date(); DateFormat ourDateFormat = DateFormat.getDateInstance(DateFormat.LONG,Locale.GERMAN); String dateGerman = ourDateFormat.format(curentDate); System.console().printf("%n\tТекущая дата (в Германском формате): "); onMonitorOut.printf("%s%n",dateGerman); System.console().printf("%n\t"+java.nio.charset.Charset.isSupported("Cp850")); // проверка поддержки кодовой страницы - поддерживается } } catch(Exception e) { System.out.println(e+" - вот такая вот ошибочка"); } finally { if(onMonitorOut != null) onMonitorOut.close(); if(onMonitorErr != null) onMonitorErr.close(); } } } Вот что получается при работе программы (кодовая страница 866): d:\Java\Kap07>java RandomDate Текущая дата (в Германском формате): 1. MДrz 2016 true При переключении на другую русскоязычную кодовую страницу d:\Java\Kap07>chcp 1251 Текущая кодовая страница: 1251 d:\Java\Kap07>java RandomDate Текущая дата (в Германском формате): 1. M„rz 2016 true При переключении на кодовую страницу 850, поддерживающую символы западной Европы (умлаут ä отображается правильно): d:\Java\Kap07>chcp 850 Active code page: 850 d:\Java\Kap07>java RandomDate ??????? ???? (? ?????????? ???????): 1. März 2016 true d:\Java\Kap07> Подскажите, пожалуйста причину некорректного отображения символа или где можно об этом почитать. Запускать компилятор с опцией -encoding 850 пробовал, кирилица не отображается.Заранее благодарю за помощь. |
Сообщ.
#2
,
|
|
|
Цитата Пианист @ Подскажите, пожалуйста причину некорректного отображения символа Причина очевидна: этого символа нет в кодовых страницах 866 и 1251. Цитата Пианист @ Запускать компилятор с опцией -encoding 850 пробовал, кирилица не отображается. Естественно, ведь её нет в кодовой странице 850. Цитата Пианист @ где можно об этом почитать В описании кодировок и кодовых страниц. Попробуй -encoding 65001 и new PrintStream(System.out, true, "UTF-8") |