1

我有以下十进制 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();
    }

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

4

2 回答 2

3

当您打电话时,Writer.write(int)您应该提供一个 Unicode 值。

例如,看看你的第一个字符,你有 Unicode 146,也就是 U+0092。查看 U+0080 到 U+00FF的Unicode 图表,这是“私人使用 2”字符。目前尚不清楚为什么您会期望它以撇号形式出现。

如果您有想要在文件中结束的确切字节,则根本不应该使用 a Writer- 您应该只使用OutputStream.

于 2012-11-16T12:38:49.127 回答
-2

outputstream 是抽象类。那么 write 函数是如何使用的呢?我在将汉字写入 excel 文件时遇到了类似的问题。我以与提到的代码非常相似的方式构建了我的代码。而不是 OutputStreamWriter =new OutputStreamWriter(new FileOutputStream(output),"utf-8"); 我用 =new OutputStream(new FileOutputStream(output),"utf=8");

我能够通过此修改构建代码,但 excel 中的值仍然是乱码

于 2012-11-20T11:03:55.060 回答