java encode String to UTF

时间:2016-04-27 16:04:11

标签: java encoding utf-8

我想在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

2 个答案:

答案 0 :(得分:1)

java中的

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字符。