在升级Eclipse之后,Java ResourceBundles无法正确读取utf-8字符

时间:2013-11-18 07:09:23

标签: java eclipse utf-8 resourcebundle

我有一个正常运行的项目很长一段时间。两天前,我将我的Eclipse版本更新为Kepler的版本,从那时起 - 我的属性文件无法正确读取。 希伯来文字母的内容如下:“××××××××××××××××××××××”。

我虽然以某种方式破坏了文件,但我将它们复制粘贴到最简单的txt文件中并再次添加到项目中。如果我只是简单地阅读它们就可以正确读取它们,但如果我继续使用ResourceBundle实现它们就无法正确读取。

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

这是资源代码:


        public class ResourceManager {

            protected final Logger logger = Logger.getLogger(this.getClass().getName());
            public static final String FILE_PREFIX = "file::";
            private static Locale locale = null;
            private static Map resourcesTable = new HashMap();

            // Static initializer of the Local object - this currently return "iw"
            static {
                locale = new Locale(ApplicationConfiguration.getInstance().getProperty("user.language"));
            }

            /**
             * Return the Resources object according to the base name and Locale.
             */
            private static Resources getResource(String baseName) {
                Resources resource = (Resources) resourcesTable.get(baseName);
                if (resource == null) {
                    resource = new Resources(baseName, locale);
                    resourcesTable.put(baseName, resource);
                }
                return resource;
            }

        //more code...

    /* This is the problematic method - but the problem starts even before when adding the resource to the resources map */
            private static String getFormatedMessage(String baseName, String messageKey, Object... args) {
                Resources resource = getResource(baseName);
                String msg = null;
                if (args == null || args.length == 0) {
                    msg = resource.getString(messageKey, "");
                } else {
                    msg = resource.format(messageKey, args);
                }

                return msg;
            }

        ....

        }

2 个答案:

答案 0 :(得分:2)

最终我没有创建新的工作区 - 我希望我的代码可以在任何平台下工作,并且#34;在任何条件下#34;。所以我通过更改代码来使用Properties而不是Resources来解决它。 作为输入参数,我使用了一个带有" utf-8"编码集:


    ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
    Resource[] fileInJar = resourceResolver.getResources(filePath);
    Properties properties = new Properties();
    BufferedReader reader = new BufferedReader(new InputStreamReader(fileInJar[0].getInputStream(), "UTF-8"));
    properties.load(reader);

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

卡梅尔

答案 1 :(得分:1)

打开eclipse,转到菜单“project” - > properties->资源并将编码设置为utf-8 或“窗口” - >首选项 - > general->工作区和设置编码