Java将文件写为纯粹的“windows-1252”

时间:2012-11-16 12:35:05

标签: java encoding

我有以下数组的十进制ascii值

int[] istr={146,192,128,224,185,152,240,192,6,26,66,72,186,184,88,128,182,40,104,96,36,236,152,128,212,200,64,64,101,252,174,0,96,192,112,24,173,228,200,0,192,128,96,192,144,116,201,48};

我想将这些值作为(ascii / windows-1252)字符写入文件。

HOW IT SHOULD LOOK LIKE:    ’À€à¹˜ðÀBHº¸X€¶(h`$였ÔÈ@@eü®
MY OUTPUT:                  ?À?à¹?ðÀBHº¸X?¶(h`$ì??ÔÈ@@eü®

您可以很容易地看到我的输出中有一些字符不会像我期望的那样出现在文件中。 写我文件的代码:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(output),"windows-1252");
    try {
        for (int c : istr) {
            out.write(c);
        }
    } finally {
        out.close();
    }

那么为什么有些特殊字符没有正确写入我的文件?

2 个答案:

答案 0 :(得分:3)

当您致电Writer.write(int)时,您的目的是提供Unicode值。

所以看一下你的第一个角色,你就得到了Unicode 146,又名U + 0092。查看Unicode chart for U+0080 to U+00FF,这是“私人使用2”字符。目前尚不清楚为什么你会期望它作为撇号出现。

如果您已准确填写文件中的字节,则根本不应使用Writer - 您应该只使用OutputStream

答案 1 :(得分:-2)

outputstream是抽象类。如何使用写入功能? 我在将中文字符写入excel文件时遇到了类似的麻烦。我以与提到的代码非常相似的方式构建我的代码。和OutputStreamWriter的intead = new OutputStreamWriter(new FileOutputStream(output),“utf-8”);  我用了 = new OutputStream(new FileOutputStream(output),“utf = 8”);

我能够使用此修改构建代码,但excel中的值仍然是胡言乱语