我在服务器中有一个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
在这里是socket
。 re
已初始化为BufferedReader re;
try {
s= new Socket("localhost", "2222");
} catch (IOException ex) {
ex.printStackTrace();
}
答案 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();