我需要使用Java的资源属性中使用UTF-8 ResourceBundle
。当我直接将文本输入属性文件时,它显示为mojibake。
我的应用程序在Google App Engine上运行。
谁能给我一个例子吗?我无法完成这项工作。
该ResourceBundle#getBundle()
封面下使用PropertyResourceBundle
时,.properties
被指定的文件。默认情况下Properties#load(InputStream)
,这反过来使用它来加载那些属性文件。根据javadoc
,默认情况下将其读取为ISO-8859-1。
public void load(InputStream inStream) throws IOException
从输入字节流中读取属性列表(键和元素对)。输入流采用load(Reader)中指定的面向行的简单格式,并假定使用ISO 8859-1字符编码;即每个字节是一个Latin1字符。不在Latin1中的字符以及某些特殊字符使用Java™语言规范第3.3节中定义的Unicode转义在键和元素中表示。
因此,你需要将它们另存为ISO-8859-1。如果你有任何超出ISO-8859-1范围的字符,并且无法使用\uXXXX
,因此不得不将文件另存为UTF-8,那么你需要使用native2ascii工具转换UTF-8保存的属性文件到ISO-8859-1
保存的属性文件,其中所有未发现的字符都转换为\uXXXX
格式。下面的示例将UTF-8编码的属性文件text_utf8.properties
转换为有效的ISO-8859-1
编码的属性文件text.properties。
native2ascii-编码UTF-8 text_utf8.properties text.properties
当使用健全的IDE(例如Eclipse)时,.properties
在基于Java的项目中创建文件并使用Eclipse自己的编辑器时,这已经自动完成。Eclipse将透明地将超出ISO-8859-1范围的字符转换为\uXXXX
格式。另请参见下面的屏幕截图(请注意底部的“属性”和“源”选项卡,单击以查看大图):
另外,你还可以创建一个自定义ResourceBundle.Control实现,其中你可以使用来将属性文件显式读取为UTF-8 InputStreamReader,这样你就可以将它们另存为UTF-8,而无需麻烦native2ascii。这是一个启动示例:
public class UTF8Control extends Control {
public ResourceBundle newBundle
(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException
{
// The below is a copy of the default implementation.
String bundleName = toBundleName(baseName, locale);
String resourceName = toResourceName(bundleName, "properties");
ResourceBundle bundle = null;
InputStream stream = null;
if (reload) {
URL url = loader.getResource(resourceName);
if (url != null) {
URLConnection connection = url.openConnection();
if (connection != null) {
connection.setUseCaches(false);
stream = connection.getInputStream();
}
}
} else {
stream = loader.getResourceAsStream(resourceName);
}
if (stream != null) {
try {
// Only this line is changed to make it to read properties files as UTF-8.
bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
} finally {
stream.close();
}
}
return bundle;
}
}
可以如下使用:
ResourceBundle bundle = ResourceBundle.getBundle("com.example.i18n.text", new UTF8Control());
我正在使用Gradle构建一个jar,其中包含META-INF中的xml文件。此文件的行如下 允许针对不同环境使用不同的SQL数据库。我想告诉gradle从项目属性展开${SQLDialent}。 我试过这个: 但是它因为而失败,在我看来,Jar任务也试图扩展文件中的属性。所以我尝试了 这不会引发上述异常,而是导致所有资源被复制两次—一次使用属性扩展,一次不使用属性扩展。我设法解决了这个问题 这正
22.7.1.Source Set 属性 下表列出了 Source Set 的一些重要属性, 更多细节请查看 SourceSet 的 API 文档. 表22.9.java 插件- Source Set 属性 配置名称 类型 默认值 描述 name String (read-only) Not null 用来识别source set的名称 output SourceSetOutput(read-on
在扩展中经常需要保存C++指针,使用属性操作方法,需要分2条指令实现从属性 -> 资源变量 -> 指针的转换。 PHP-X提供了oGet和oSet两个方法来简化资源属性的操作。 设置指针 _this.oSet("propertyName", "ResourceType", new CppObject(1, 2)); 获取指针 CppObject *ptr = _this.oGet<CppObje
问题内容: 我需要读取代码中的文件。它实际上位于此处: 我将其放在源包中,以便在创建可运行的jar文件(导出-> Runnable JAR文件)时将其包含在jar中。最初,我将其放在项目根目录中(并尝试了一个普通的子文件夹),但导出文件并未将其包含在jar中。 如果在我的代码中,我这样做: jar文件正确地找到了该文件,但是在本地运行(运行方式-> Java Main应用程序)会引发文件未找到异常
我正在尝试通过java运行jmeter。这些例子来自https://www.blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui 我上传了jmx文件,如示例中所述。 在jmx文件中,我有属性。指定的属性,如${uuuu属性(0个用户,0)} 我设法通过命令行使用-J参数上传了这个属性。 如何通过java指定参数
我有这个pom结构,我正在尝试访问属性。我无法通过另一个属性中心的资源筛选访问此内容。端口,在属性部分中定义 在中,我有属性文件,它有这个 我就像这样进入财产 但它会打印 <代码>轮毂${集线器端口} 我提到了这个问题,但我无法访问该物业。