【发布时间】:2011-10-03 18:17:14
【问题描述】:
我已经在整个网站上进行了搜索,但我认为我的问题略有不同,并且在我心力衰竭或烧毁计算机之前确实需要一些帮助。
我动态生成月份名称列表(格式为 2011 年 6 月、2011 年 7 月),显然我希望它对区域设置敏感:因此我使用如下简单的日期格式对象:
//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());
这个“应该”返回月份名称的本地化版本。在波兰语中,“September”这个词是“Wrzesień”——注意 n 上的重音。但是我得到的只是“Wrzesie?”
我做错了什么?
谢谢大家 - 我现在接受这是一个演示问题 - 但我如何安全地“读取”来自 dtFormat 的结果 - 我使用 getBytes 等在 ref 下面添加了一些 cmets - 这在其他情况下有效,我只是可以' t 似乎可以访问字符串结果而不会弄乱它
-- 最终编辑;对于遇到此问题的任何人
答案在 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");
非常感谢您的帮助
【问题讨论】:
-
在这里工作正常。您的问题在演示文稿中。请编辑您的问题以包含有关此的更多详细信息。你到底是如何呈现它的?您使用的是什么 UI 技术?
-
k,目前我正在做一个简单的“System.out.println”,但是在 UI 中(所有这些都可以很好地显示波兰语字符)我在顶部使用 JSP 和 lang="pl" 在显示结果字符串的表单元素(选择列表)中。
-
你可能会说我在 Java 知识方面是最低的;但是我在应用程序上的所有菜单等都可以在不同语言之间完美切换(手工编码,因此没有底层框架)
-
另一个想法 - 对不起,当我完成一行时继续按回车...我尝试使用“new String(dtFormat.format(mCal.getTime()).getBytes("UTF-8")) &“ISO-8859-1”
-
那么,您只是在标准输出中遇到问题(
System.out.println()最终出现在哪里),而不是在浏览器中 JSP 生成的 HTML 输出中遇到问题?标准输出连接到哪里?命令提示符控制台? IDE(Eclipse/Netbeans)控制台?日志文件?
标签: java localization simpledateformat