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

Java ResourceBundles无法正确读取utf-8字符-升级Eclipse后,java,eclipse,utf-8,resourcebundle,Java,Eclipse,Utf 8,Resourcebundle,我有一个项目,在相当长的一段时间内运行正常。两天前,我将Eclipse版本更新为开普勒版本,从那以后,我的属性文件没有被正确读取。 希伯来语的字母是这样读的:“×××××××××××××××××××××××” 我认为不知怎么的,这些文件被破坏了,所以我将它们复制粘贴到最简单的txt文件中,并再次添加到项目中。如果我只是简单地读取它们,它们就会被正确读取,但是如果我继续使用ResourceBundle实现,它们就不会被正确读取 有人知道如何解决这个问题吗? 我将平台和文件设置更改为utf-8编码-

我有一个项目,在相当长的一段时间内运行正常。两天前,我将Eclipse版本更新为开普勒版本,从那以后,我的属性文件没有被正确读取。 希伯来语的字母是这样读的:“×××××××××××××××××××××××”

我认为不知怎么的,这些文件被破坏了,所以我将它们复制粘贴到最简单的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; } .... } 公共类资源管理器{ 受保护的最终记录器=Logger.getLogger(this.getClass().getName()); 公共静态最终字符串FILE_PREFIX=“FILE::”; 私有静态区域设置=null; 私有静态映射resourcesTable=新HashMap(); //本地对象的静态初始值设定项-当前返回“iw” 静止的{ 语言环境=新的语言环境(ApplicationConfiguration.getInstance().getProperty(“user.language”); } /** *根据基本名称和区域设置返回Resources对象。 */ 私有静态资源getResource(字符串baseName){ Resources resource=(Resources)resourcesTable.get(baseName); if(资源==null){ 资源=新资源(基本名称、区域设置); resourcesTable.put(baseName,resource); } 返回资源; } //更多代码。。。 /*这是一个有问题的方法——但问题甚至在将资源添加到资源映射之前就开始了*/ 私有静态字符串GetFormattedMessage(字符串baseName、字符串messageKey、对象…args){ Resources resource=getResource(baseName); 字符串msg=null; if(args==null | | args.length==0){ msg=resource.getString(messageKey,“”); }否则{ msg=resource.format(messageKey,args); } 返回味精; } .... }
打开eclipse,进入菜单“项目”->properties->Resource并将编码设置为utf-8
或者“窗口”->preferences->general->workspace并在那里设置编码

打开eclipse,进入菜单“项目”->properties->Resource并将编码设置为utf-8
或者“窗口”->preferences->general->workspace并在那里设置编码

最终我没有创建一个新的工作区-我希望我的代码在任何平台下工作,“在任何条件下”。因此,我通过将代码更改为使用属性而不是资源来解决这个问题。 作为输入参数,我使用了一个带有“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); ResourcePatternResolver resourceResolver=新路径匹配资源模式解析器(); Resource[]fileInJar=resourcesolver.getResources(filePath); 属性=新属性(); BufferedReader=new BufferedReader(new InputStreamReader(fileInJar[0].getInputStream(),“UTF-8”); 加载(读卡器); 谢谢那些回答的人!我真的很感激


Carmel

最终我没有创建新的工作区——我希望我的代码能够在任何平台下“在任何条件下”工作。因此,我通过将代码更改为使用属性而不是资源来解决这个问题。 作为输入参数,我使用了一个带有“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); ResourcePatternResolver resourceResolver=新路径匹配资源模式解析器(); Resource[]fileInJar=resourcesolver.getResources(filePath); 属性=新属性(); BufferedReader=new BufferedReader(new InputStreamReader(fileInJar[0].getInputStream(),“UTF-8”); 加载(读卡器); 谢谢那些回答的人!我真的很感激


Carmel

谢谢。我已经将它们都设置为UTF-8,甚至重新启动了Eclipse。。。仍然不起作用。如果您通过更新选项更新了eclipse,请尝试从eclipse站点下载一个新的打包IDE,并在签出源代码之前设置工作区的编码。我已经从Eclpise站点下载并使用zip文件安装了它-您能解释我现在做什么吗?为eclipse创建一个工作区(在启动时选择文件夹). 设置工作区的编码。从svn\existing\u java\u project OptionTanks签出/导入项目。我已经将它们都设置为UTF-8,甚至重新启动了Eclipse。。。仍然不起作用。如果您通过更新选项更新了eclipse,请尝试从eclipse站点下载一个新的打包IDE,并在签出源代码之前设置工作区的编码。我已经从Eclpise站点下载并使用zip文件安装了它-您能解释我现在做什么吗?为eclipse创建一个工作区(在启动时选择文件夹). 设置工作区的编码。从svn\existing\u java\u项目选项签出/导入您的项目令人惊讶的是,您的声明以前已经生效。从不支持通过属性文件定义的资源束
UTF-8
。它们被定义为
iso-latin-1
,并且要求所有其他非拉丁字符都写为
\uxxx
。他们解决这个问题的唯一方法是使用自定义加载代码,但如果您使用自定义加载代码并向我们展示该代码,您会知道的,不是吗?令人惊讶的是,您的声明以前是有效的。从不支持通过属性文件定义的资源束
UTF-8
。它们被定义为
iso-latin-1
,并且要求所有其他非拉丁字符都写为
\uxxx
。解决这个问题的唯一方法是使用自定义加载代码,但您可能会