Я искал по всему сайту, но думаю, что у меня немного другая проблема, и я мог бы действительно помочь с ней, прежде чем у меня случится сердечная недостаточность или я сожгу компьютер.
Я динамически генерирую список названий месяцев (в форме июнь 2011 г., июль 2011 г.) и, очевидно, я хочу, чтобы это чувствительно к локали: поэтому я использую простой объект формата даты следующим образом:
//the actual locale name is dependent on UI selection
Locale localeObject=new Locale("pl");
// intended to return full month name - in local language.
DateFormat dtFormat = new SimpleDateFormat("MMMM yyyy",localeObject);
//this bit just sets up a calendar (used for other bits but here to illustrate the issue
String systemTimeZoneName = "GMT";
TimeZone systemTimeZone=TimeZone.getTimeZone(systemTimeZoneName);
Calendar mCal = new GregorianCalendar(systemTimeZone); //"gmt" time
mCal.getTime(); //current date and time
но если я сделаю это:
String value=dtFormat.format(mCal.getTime());
это «следует» вернуть локализованную версию названия месяца. В переводе с польского слово «сентябрь» - «Wrzesień» - обратите внимание на акцент на русском языке. Однако все, что я получаю, это "Wrzesie?"
Что я делаю не так?
Спасибо всем - теперь я согласен с тем, что это проблема с презентацией, - но как я могу "прочитать" результат из dtFormat безопасно - я добавил несколько комментариев ниже, используя refBettes и т. Д. - это работало в других ситуациях, я просто могу ' Кажется, что вы не можете получить доступ к строковому результату без ошибок
- ОКОНЧАТЕЛЬНОЕ редактирование; для всех, кто сталкивается с этой проблемой
Ответ был в блоге BalusC: http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#DevelopmentEnvironment
В основном объект DTformat возвращал UTF-8 и автоматически преобразовывался обратно в системный набор символов по умолчанию, когда я читал его в строку
поэтому этот код работал для меня
new String(dtFormat.format(mCal.getTime()).getBytes("UTF-8"),"ISO-8859-1");
Большое спасибо за помощь