Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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将文件编写为纯“文件”;windows-1252“;_Java_Encoding - Fatal编程技术网

Java将文件编写为纯“文件”;windows-1252“;

Java将文件编写为纯“文件”;windows-1252“;,java,encoding,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 SH

我得到了以下十进制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();
    }
那么,为什么有些特殊字符没有正确写入我的文件?

当您调用时,您需要提供一个Unicode值

以第一个字符为例,我们得到了Unicode 146,也就是U+0092。看看这个,这就是“私用2”这个字。不清楚为什么你会期望它以撇号的形式出现

如果您已经获得了要在文件中结束的确切字节,那么根本不应该使用
编写器
——您应该在调用时使用
输出流

来提供Unicode值

以第一个字符为例,我们得到了Unicode 146,也就是U+0092。看看这个,这就是“私用2”这个字。不清楚为什么你会期望它以撇号的形式出现


如果您已经得到了要在文件中结束的确切字节,那么根本不应该使用
编写器
——您应该只使用
输出流

输出流是抽象类。那么写函数是如何使用的呢? 在将汉字写入excel文件时,我遇到了类似的问题。我构建代码的方式与前面提到的代码非常相似。输出流编写器和intead =新的OutputStreamWriter(新文件OutputStream(输出),“utf-8”); 我曾经 =新输出流(新文件输出流(输出),“utf=8”)


我可以通过这个修改构建代码,但是excel中的值仍然是乱七八糟的

outputstream是抽象类。那么写函数是如何使用的呢? 在将汉字写入excel文件时,我遇到了类似的问题。我构建代码的方式与前面提到的代码非常相似。输出流编写器和intead =新的OutputStreamWriter(新文件OutputStream(输出),“utf-8”); 我曾经 =新输出流(新文件输出流(输出),“utf=8”)


我可以通过这个修改来构建代码,但是excel中的值仍然是乱七八糟的

以后您如何查看该文件?请注意,关于127的任何内容都不是“十进制ascii值”。使用Notepad++(两个文件的编码都设置为ANSI),之后您如何查看该文件?请注意,关于127的任何内容都不是“十进制ascii值”。使用记事本++(两个文件的编码都设置为ANSI)时,“正确的输出”由完全相同的用Delphi编写的程序生成(旧版本不支持unicode)。我正试图用Java重写这个。根据ASCII表格()146应该以撇号结尾。@k_wave:我认为你没有足够仔细地阅读我的答案。当你调用[code>out.write(146)时,你希望它写什么字符,为什么?方法的输入是字符的Unicode值。那个字符是“private use 2”,不是撇号。@k_wave:你提到的页面甚至说:“128到159个字符是Unicode控制字符。”杰普,这些是Unicode字符-我知道。所以问题是,为什么我能够在Delphi/C/C++中通过将146转换为字符来打印撇号?然而,直接使用outputstream完成了这项工作。“正确的输出”是由用Delphi编写的完全相同的程序生成的(旧版本不支持unicode)。我正试图用Java重写这个。根据ASCII表格()146应该以撇号结尾。@k_wave:我认为你没有足够仔细地阅读我的答案。当你调用[code>out.write(146)时,你希望它写什么字符,为什么?方法的输入是字符的Unicode值。那个字符是“private use 2”,不是撇号。@k_wave:你提到的页面甚至说:“128到159个字符是Unicode控制字符。”杰普,这些是Unicode字符-我知道。所以问题是,为什么我能够在Delphi/C/C++中通过将146转换为字符来打印撇号?但是,直接使用outputstream就可以了。只需使用
new FileOutputStream()
。FileOutputstream继承自Outputstream-1用于将此作为答案而不是评论发布。只需使用
newfileoutputstream()
。FileOutputstream继承自Outputstream-1将此作为答案而不是评论发布。