乱码问题记录

/**
* 转换流,字节流转字符流
* @Authror wey
* @Date 2020/5/8 16:59
*/
public class ConvertTest {
public static void main(String[] args) {
test02();
}

/**
* 这里输出到文件没有乱码是因为,项目默认就是utf-8的字符集编码格式
* 所以不会乱码,如果读取的输入流文件的编码是gbk,那么就会乱码,
* 如果是gbk,那么输出时也要设置为gbk
*/
public static void test(){
try(BufferedReader reader = new BufferedReader(
new InputStreamReader(
new URL("http://www.baidu.com").openStream(),"utf-8"));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("baidu.html"),"utf-8")))
{
String temp;
while((temp = reader.readLine()) != null){
// System.out.print(temp);
writer.write(temp);
writer.newLine();
}
writer.flush();
}catch (IOException e){
System.out.println(e);
}
}

/**
* 使用字节输入流,得到的是乱码,因为中文utf-83个字节
* 所以,一个一个字节读取会乱码
* 字节数不够就乱码
*/
public static void test01(){
try(InputStream is = new URL("http://www.baidu.com").openStream();){
int temp;
while((temp = is.read()) != -1){
System.out.print((char)temp);
}
}catch (IOException e){
System.out.println(e);
}
}

/**
*将字节流转换成字符流,默认使用的是项目编码utf-8,所以不会乱码
* 如果读取的是gbk,那么使用字符转换流时如果不设置编码就会乱码
*/
public static void test02(){
try(InputStreamReader is = new InputStreamReader(new URL("http://www.baidu.com").openStream())){
int temp;
while((temp = is.read()) != -1){
System.out.print((char)temp);
}
}catch (IOException e){
System.out.println(e);
}
}
}
posted @ 2020-05-08 17:21  WeyJ  阅读(376)  评论(0)    收藏  举报