【问题标题】:Java ResourceBundles does not read utf-8 characters correctly - after upgrading EclipseJava ResourceBundles 无法正确读取 utf-8 字符 - 升级 Eclipse 后
【发布时间】:2013-12-01 06:20:12
【问题描述】:

我有一个可以正常运行很长时间的项目。几天前,我将我的 Eclipse 版本更新为 Kepler 的版本,从那时起 - 我的属性文件没有被正确读取。 希伯来语字母是这样读的:“×××ש××שת×ש×ס×ס××”。

虽然文件不知何故被破坏了,所以我将它们复制粘贴到最简单的 txt 文件中,然后再次添加到项目中。如果我只是简单地阅读它们,它们就会被正确读取,但如果我继续使用 ResourceBundle 实现,它们就不会被正确读取。

有人知道如何解决这个问题吗? 我将平台和文件设置更改为 utf-8 编码 - 我能想到的任何地方......

这是资源代码:

公共类资源管理器{ protected final Logger logger = Logger.getLogger(this.getClass().getName()); 公共静态最终字符串 FILE_PREFIX = "file::"; 私有静态语言环境语言环境 = null; 私有静态地图资源表 = new HashMap(); // 本地对象的静态初始化器 - 当前返回“iw” 静止的 { locale = new Locale(ApplicationConfiguration.getInstance().getProperty("user.language")); } /** * 根据基本名称和区域设置返回资源对象。 */ 私有静态资源 getResource(String baseName) { 资源resource = (Resources) resourcesTable.get(baseName); 如果(资源==空){ 资源 = 新资源(baseName,语言环境); resourcesTable.put(baseName, 资源); } 返回资源; } //更多代码... /* 这是有问题的方法 - 但问题甚至在将资源添加到资源映射之前就开始了 */ 私人静态字符串getFormatedMessage(字符串baseName,字符串messageKey,对象... args){ 资源资源 = getResource(baseName); 字符串味精=空; if (args == null || args.length == 0) { msg = resource.getString(messageKey, ""); } 别的 { msg = resource.format(messageKey, args); } 返回味精; } …… }

【问题讨论】:

  • 令人惊讶的是您的主张以前曾奏效。通过属性文件定义的资源包从不支持UTF-8。它们被定义为iso-latin-1,并且要求所有其他非拉丁字符都写为\uxxxx。他们解决此问题的唯一方法是使用自定义加载代码,但您会知道是否使用了自定义加载代码并向我们展示该代码,不是吗?

标签: java eclipse utf-8 resourcebundle


【解决方案1】:

打开eclipse,进入菜单“project”->properties->Resource,设置编码为utf-8 或“window”->preferences->general->workspace 并在那里设置编码

【讨论】:

  • 谢谢。我已经将它们都设置为 UTF-8,甚至重新启动了 Eclipse... 仍然无法正常工作。
  • 如果您通过更新选项更新了eclipse,请尝试从eclipse站点下载一个新的打包IDE,并在查看源代码之前设置工作区的编码
  • 我已经使用 Eclpise 站点的 zip 文件下载并安装了它 - 你能解释一下我现在做什么外壳吗?
  • 为 Eclipse 创建一个工作区(在启动时选择文件夹)。设置工作区的编码。从 svn\existing_java_project 选项签出/导入您的项目
【解决方案2】:

最终我没有创建一个新的工作区——我希望我的代码能够在任何平台下“在任何条件下”工作。所以我通过更改代码以使用属性而不是资源来解决它。 作为输入参数,我使用了带有“utf-8”编码集的阅读器:

ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); 资源[] fileInJar = resourceResolver.getResources(filePath); 属性属性 = 新属性(); BufferedReader reader = new BufferedReader(new InputStreamReader(fileInJar[0].getInputStream(), "UTF-8")); 属性.load(读者);

感谢那些回答的人!我真的很感激...

卡梅尔

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多