我想在 Windows 盒子上显示属性文件中的字符(中文或其他语言)。
假设我从系统属性中读取了一个属性 server.location=上海的位置,该属性是在服务器启动时设置的。
我尝试这样做
new String(locationStr.getBytes(System.getProperty("file.encoding")), "UTF-8");
这适用于 Linux,但无法在 Windows 上运行。
以下是摘要片段,没有如何设置系统属性的语法
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 提到的方式读取属性并正确检索字符串
最佳答案
java中的
String/char/Reader/Writer
包含Unicode文本。二进制数据、byte[]、InputStream/OutputStream
必须与可转换为文本、字符串的编码关联。
您的属性文件似乎采用 UTF-8 格式。然后在加载属性时指定固定编码。
InputStream iStream = fileURL.openStream();
Reader reader = new BufferedReader(new InputStreamReader(iStream, StandardCharsets.UTF_8));
Properties prop = new Properties();
prop.load(reader);
这里,InputStreamReader 通过指定输入流编码的转换来桥接从二进制数据到 (Unicode) 文本的转换。
关于java 将字符串编码为UTF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36895143/