Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“Java不写”\u";到属性文件_Java_Encoding_Properties_Hex_Translation - Fatal编程技术网

“Java不写”\u";到属性文件

“Java不写”\u";到属性文件,java,encoding,properties,hex,translation,Java,Encoding,Properties,Hex,Translation,我有一个属性文件,它将德语字符映射到它们的十六进制值(00E4)。我必须用“iso-8859-1”对这个文件进行编码,因为这是让德语字符显示出来的唯一方法。我要做的是通读德语单词,检查这些字符是否出现在字符串中的任何地方,以及它们是否用十六进制格式替换该值。例如,将德语字符替换为\u00E4 代码很好地替换了字符,但是在一次反冲中,我得到了两个字符,就像这样\\u00E4。您可以在代码中看到我正在使用“\\u”尝试打印\u,但实际情况并非如此。你知道我哪里出了问题吗 private void c

我有一个属性文件,它将德语字符映射到它们的十六进制值(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();
}

关键是,您编写的不是一个简单的文本文件,而是一个java属性文件。在属性文件中,反斜杠字符是转义字符,因此,如果属性值包含反斜杠,Java很乐意为您转义它-这不是您想要的


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

关键是您编写的不是简单的文本文件,而是java属性文件。在属性文件中,反斜杠字符是转义字符,因此,如果属性值包含反斜杠,Java很乐意为您转义它-这不是您想要的


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

“我得到了两个这样的\u00E4。”这是打字错误吗?有一个。谢谢你指出这一点,看来你必须避开这里的反斜杠。但是,是的,这是错误的,应该有另一个反斜杠。“我得到两个这样的\u00E4。”这是打字错误吗?有一个。谢谢你指出这一点,看来你必须避开这里的反斜杠。是的,这是错误的,应该有另一个反斜杠。我的属性映射看起来像u=00E4。因此,我没有任何抵触情绪,因为我只在创建新字符串时包含这些。我按下它会忽略有两个反斜杠的事实,只打印一个。我想过一会儿我会试试你的方法,因为那听起来是个不错的选择。实现这两种方法都不会花费太长时间。但是新字符串也是一个属性值(转到
importProps
),它包含一个反斜杠,在保存时会转义。我的属性映射看起来像u=00E4。因此,我没有任何抵触情绪,因为我只在创建新字符串时包含这些。我按下它会忽略有两个反斜杠的事实,只打印一个。我想过一会儿我会试试你的方法,因为那听起来是个不错的选择。实现这两个字符串都不会花费太长时间。但是新字符串也是一个属性值(转到
importProps
),它包含一个在保存时转义的反斜杠。