我想在Windows框中的属性文件中显示字符(中文或其他语言)。
让我说我从System属性读取属性server.location =上海的位置,该属性在服务器启动时设置。
我试图这样做
new String(locationStr.getBytes(System.getProperty("file.encoding")), "UTF-8");
这适用于Linux,但无法在Windows上运行。
以下是snipet的汇总,没有设置系统属性的语法
URL fileURL = new URL("file:filePathAndName");
InputStream iStream = fileURL.openStream () ;
Properties prop = new Properties();
prop.load(iStream);
//Enumerate over prop and set System.setProperty (key, value);
将属性读取为System.getProperty(" server.location")
这是针对所有属性文件集中完成的,因此在读取或设置特定编码时修改任何内容可能会影响其他文件,因此不可取。
还尝试使用URLEncoder.encode
进行编码,但没有帮助。
我没有看到任何特定的编码集。 Java使用UTF-16,在Windows上的编码是' Cp1252'。我在这里缺少什么?
任何有助于使这项工作或投入一些亮光的帮助表示赞赏。还试图解决现有问题,但答案并没有直接适用,因此产生了新的问题。 感谢
编辑: 无法将获得的字符串转换为UTF-8。以某种方式说服人们以Joop提到的方式读取属性并正确检索String
答案 0 :(得分:1)
String/char/Reader/Writer
包含Unicode文本。二进制数据byte[], InputStream/OutputStream
必须与可转换为文本的编码相关联,String。
您的属性文件似乎是UTF-8。然后在加载属性时指定固定编码。
InputStream iStream = fileURL.openStream();
Reader reader = new BufferedReader(new InputStreamReader(iStream, StandardCharsets.UTF_8));
Properties prop = new Properties();
prop.load(reader);
这里,InputStreamReader通过指定InputStream编码的转换来桥接从二进制数据到(Unicode)文本的转换。
答案 1 :(得分:0)
Properties prop = new Properties();
InputStream input = null;
String filename = "config.properties";
input = ClassName.class.getClassLoader().getResourceAsStream(filename);
//loading properties
prop.load(input);
//getting the properties
System.out.println(prop.getProperty("propertyname1"));
System.out.println(prop.getProperty("propertyName2"));
System.out.println(prop.getProperty("propertyName3"));
或者你可以列举一下原则
Enumeration e = prop.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
System.out.println(key + " -- " + prop.getProperty(key));
}
这就是你应该如何从属性文件中获取属性 而且你不必担心utf-8字符。