JAVA printStream乱码问题
来源:互联网 发布:缺少mysql.sock 编辑:程序博客网 时间:2024/05/22 12:05
printStream是一个字节流,但是有一个输出字符串的方法,因为之前一直没有注意,今天写一个通信程序的时候出现了乱码,后来发现是这个printSteam.println的问题
即:虽然printSteam可以输出字符串 但是不管这个字符串原来是什么编码 在输出的时候 都会先转化为默认字符编码的字节 再发送!
就是说 假设你操作系统默认编码是gbk 然后你先将一个字符串使用string.getByte("utf-8") 然后再new String(byte[],"utf-8")转化为utf-8编码格式 这个时候你如果使用printSteam.println
那么 这个字符串还是会被解码成gbk后发送
所以如果想不乱码 双方都要使用字符流发送接受 即bufferWriter 和bufferReader 然后指定相同的字符集
另外 在eclipse里启动程序和导出jar包双击启动的默认编码可能不同 这就导致可能在eclipse里程序不会乱码 导出后就会乱码 所以最好就是使用字符流 不要使用字节流来发送字符串
实例代码
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class printTest {
public printTest() throws IOException
{
//使用两种方式输出 会得到不同的字符编码
String line="哈哈哈";
//改为gbk编码
byte[] bs=line.getBytes("GBK");
line=new String(bs,"GBK");
File file=new File("test1.txt");
file.createNewFile();
PrintStream printStream=new PrintStream(new FileOutputStream(file));
printStream.println(line);
File file2=new File("test2.txt");
file2.createNewFile();
FileOutputStream fileOutputStream=new FileOutputStream(file2);
fileOutputStream.write(bs);
}
}
文件1直接输出字符串
文件2输出字节
可以看到 无论将字符编码改成什么 使用16进制查看器就会发现 其内容都没有变
而文件2内容则随着字符编码改变而改变 这证实了printSteam在输出字符串的时候确实是对字符串进行了重新解码成默认编码
- JAVA printStream乱码问题
- java PrintStream
- java PrintStream类
- java.io.PrintStream
- Java IO PrintStream
- Java基础---property PrintStream
- Java 打印流PrintStream
- PrintStream:
- PrintStream
- PrintStream:
- PrintStream
- PrintStream
- PrintStream
- PrintStream
- PrintStream
- PrintStream
- PrintStream
- PrintStream:
- iOS-文字转语音
- uC/OS III 移植到LPC1778
- 使用Babel独立版编译ES6代码时报错误:Unexpected token <
- Eclipse新导入项目出错
- mvc框架思想
- JAVA printStream乱码问题
- 动态启用和禁用mainfest中组件
- root权限下执行文件操作失败提示“Read-only file system”解决办法
- 线程数究竟设多少合理
- 无损压缩音频格式
- [乐意黎原创]JS中null和undefined的区别
- JS校验银行卡号
- 每个程序员的都应该了解的字符编码
- applet Missing Permissions manifest attribute in main jar