apache常用配置库:损坏的属性文件

时间:2012-04-13 13:56:45

标签: java character-encoding apache-commons-config

我从客户那里得到了一个损坏的属性文件。应用程序修改该文件以更新版本号。代码使用apache commons configuration.当我测试时,库似乎总是以iso-8859-1格式写入文件。

代码简化为以下。跟踪代码写错文件有什么可能?

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

import java.io.FileWriter;
import java.io.IOException;

public class TestConfig {

    public void editVersionInfo() throws ConfigurationException, IOException {

        String filename = "C:\\temp\\VersionProperties\\Version.properties";
        PropertiesConfiguration config = new PropertiesConfiguration(filename);
        config.setProperty("application.version", "2011");
        config.save(new FileWriter(filename));

    }

    public static void main(String[] args) throws IOException, ConfigurationException {
        TestConfig tc = new TestConfig();
        tc.editVersionInfo();
    }
}

以防万一 - 坏文件如下所示。它看起来不像任何编码。该文件最初是普通的属性文件,其中的键和值都是英文(ascii chars)。

  

˚F???? Co吗?AR ??米?? E'3#?? =   ħ\ u00BD5j \ u00B3 \ u00E0 \ u0096 \ u001D \ u0081fe \ u00BEo \ B \ u00A3 \ U0001 \ u00FE \ u00A4 \ u00DE \ u0000的\ u00FBi \“\ u009C {\ u00FC \ u00D9 \ u00E2 2 C \ u00F6 \ u00FF%B \ u00A47 \ u00195 \ u001EXv \ u0097 / \ u00D7x \ u0099 \ u000E \ u00A2gIX \ u0014 \ u0097]ķ\ u00882 \ U0003 \ u0014 \ u0097 \ u00BC \ u00C3 \ u00ae转移\ u00B4 \ u001E \ u00B3R \ u00E4 \ u00DE&安培; \ u0000的\ u0016 \ u009B \ “7 \ u0085' \” \ u00DCT * v '\ u0092 \ u0007 \ u0091A \ u00BD \ u00ACl6〜\ u0097 \ u00C0 \ u00B1 \ u00D1 \ u00EB \ u00FF \ u00A8 \ u00F3 \ U0001' \ u00BF \ u0006 \ u001F \ u009C \ FK \ u009F \ u00C2 \ u00D9L ^ _ \ u0004J4 \ u00AF \ u00D8 \ u00DAW \ u00C4 \ u00CDj \ u00E3 \ u0095 \ u00D1 + \ u00CE \ U0004> Z] \ u00D7 \ u000B \ u0098 \ u0016 \ u0095 \ u00AC \ u00F7 \ u00E7 \ u009ATF \ u0019 \ F)\ u00A3 \ u00A9 \ u00DC \ u00AD \ u00ACtq5 \ u0085 \ u008E- \ u00A3oH \ u0000的\ u00C2 \ u0092 \ u00B5 \ u00F2 \ u008AG \ u008F&安培; \ u00F5 \ u0017H !\ U0003 \ u0083 \ u00B4 \ u008AV = \ u00E0 \ u00EDj \ u00F0 \ u00D0J \ u00DB \ u00CC \ u00F2O \ u00CE \ u00BE \ u00F0 * 4 \ u0006y〜\ u00C3 \ U00B7 \“\ u000B \ u00E4 \ u00C0 $> \ u00F3 \ u00F2〜\ u00CE \ u0097#\ u00BAc \ u00EC @ \ u00B4 \ u00AD \ u009A \ u00BAX \ FF \ u0083] \ u00C2 \ u00D4 \ u00AB \ u00F3 \ u009DQ \ u0092 \ u00854z \ u0097 \ u00FDG \吨\ u0095 \ u00E3}泰\ u0082I \ u00C3` \ u009E   ??

编辑:客户环境是日本人。应用程序如何始终运行  -Dfile.encoding=UTF8

1 个答案:

答案 0 :(得分:2)

我怀疑您的客户的默认字符编码与您拥有的不同。检查他们对属性file.encoding的设置(违反命名,我知道)。

另一种可能性是你有两个线程编写该属性文件。我不知道,但我怀疑Apache库默认情况下不会是线程安全的。