Java不写作" \ u"到属性文件

时间:2017-07-14 08:23:19

标签: java encoding properties hex translation

我有一个属性文件,它将德语字符映射到它们的十六进制值(00E4)。我不得不用" iso-8859-1"编码这个文件。因为这是让德国人物显示的唯一方法。我尝试做的是查看德语单词并检查这些字符是否出现在字符串中的任何位置,以及它们是否用十六进制格式替换该值。例如,用\u00E4替换德语字符。

代码替换字符很好,但是在一个强烈反对上,我得到两个像\\u00E4一样。您可以在代码中看到我使用"\\u"尝试打印\u,但事实并非如此。我在这里哪里出错了?

private void createPropertiesMaps(String result) throws FileNotFoundException, IOException
{
    Properties importProps = new Properties();
    Properties encodeProps = new Properties();

    // This props file contains a map of german strings
    importProps.load(new InputStreamReader(new FileInputStream(new File(result)), "iso-8859-1"));
    // This props file contains the german character mappings.
    encodeProps.load(new InputStreamReader(
            new FileInputStream(new File("encoding.properties")),
            "iso-8859-1"));

    // Loop through the german characters
    encodeProps.forEach((k, v) ->
    {
        importProps.forEach((key, val) ->
        {
            String str = (String) val;

            // Find the index of the character if it exists.
            int index = str.indexOf((String) k);

            if (index != -1)
            {

                // create new string, replacing the german character
                String newStr = str.substring(0, index) + "\\u" + v + str.substring(index + 1);

                // set the new property value
                importProps.setProperty((String) key, newStr);

                if (hasUpdated == false)
                {
                    hasUpdated = true;
                }
            }

        });

    });

    if (hasUpdated == true)
    {
        // Write new file
        writeNewPropertiesFile(importProps);
    }

}

private void writeNewPropertiesFile(Properties importProps) throws IOException
{
    File file = new File("import_test.properties");

    OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");

    importProps.store(writer, "Unicode Translations");

    writer.close();
}

1 个答案:

答案 0 :(得分:2)

关键是你不是在写一个简单的文本文件而是一个java属性文件。在一个属性文件中,反斜杠字符是一个转义字符,所以如果你的属性值包含一个反斜杠,那么Java很适合你逃避它 - 这不是你想要的。

您可以尝试通过编写一个可以作为proerties文件读回的plian文本文件来绕过Java的属性文件机制,但这意味着要做所有自动提供的格式化手动Properties - 类。