将字节数组保存到文件时显示丑陋的字符

时间:2013-01-26 09:48:54

标签: java bufferedreader dataoutputstream

我在服务器中有一个Text文件。我正在从客户端下载该文件。我已经给出了文件路径,应该保存它fi

创建的文本文件中包含一些丑陋的字符,而不是字符串。我怎么能纠正它?

输出格式为;

sNULdNULiNULdNUL

打印文本文件中的字符,然后输入粗体 NUL 。这是什么,我怎么能摆脱它?

FileOutputStream f= new FileOutputStream(fi);

DataOutputStream d= new DataOutputStream(f);

String fc;
while((fc  = re.readLine()) !=null)  
{  
System.out.println(fc);
d.writeChars(fc);
d.flush();

}

更新

€À€À€À€À€À€À€À€À€À€À€À€À€À€À€

更新2

InputStreamReader st= new InputStreamReader(
                    s.getInputStream());
            re= new BufferedReader(st);

s在这里是socketre已初始化为BufferedReader re;

try {
            s= new Socket("localhost", "2222");
        } catch (IOException ex) {
             ex.printStackTrace();

        }

2 个答案:

答案 0 :(得分:0)

writeChars将每个char写入基础输出流,作为2字节值,高字节优先。因此,如果流中有多字节字符,则会在输出中显示丑陋的显示字符。使用正确的编码你的溪流

尝试用d.writeChars(fc);替换d.writeUTF(fc);。希望有帮助

如果我让你正确使用输入流的US-ASCII编码。

InputStreamReader st= new InputStreamReader(
                s.getInputStream(),"US-ASCII");
        re= new BufferedReader(st);

答案 1 :(得分:0)

字符串,当您希望将它们存储在内存中时,将它们写入文件或通过Internet发送它们,需要编码为字节。有许多编码系统可以做到这一点。

writeChars将每个字符写为两个字节,这是您已经看到的。

writeUTF做的事情不是人类可读的:

  

使用Java修改后的字符串将字符串写入基础输出流   UTF-8编码与机器无关。

     

首先,将两个字节写入输出流,就好像通过   writeShort方法给出要遵循的字节数。这个值是   实际写出的字节数,而不是长度   串。在长度之后,输出字符串的每个字符,   按顺序,使用修改后的UTF-8编码作为字符。如果   抛出没有异常,写入的计数器增加了   写入输出流的总字节数。这将是   至少两加上str的长度,最多加两次加三次   str的长度。

如果您希望将文字写入文件,请不要大惊小怪,请使用FileWriter。在大多数情况下,它会假定编写人类可读文件的正确默认值。

FileWriter fw = new FileWriter(filename);
BufferedWriter bw = new BufferedWriter(fw);

while((fc  = re.readLine()) !=null) {  
    bw.write(fc);
    bw.newLine();
    bw.flush();
}
bw.close();