Resuelva el problema confuso del flujo de bytes y el flujo de caracteres (flujo de conversión)

La raíz de la confusión

Las reglas de codificación y decodificación son diferentes

Por ejemplo: IDEA lee archivos de forma predeterminada, el formato de codificación es UTF-8 y el formato de almacenamiento predeterminado para los archivos del sistema de Windows es GBK. Cuando IDEA lee archivos en Windows, si no se realiza ningún procesamiento especial, pueden aparecer caracteres confusos.

Flujo de conversión

  • InputStreamReader
  • OutputStreamWriter

Leer archivo

Puede utilizar el flujo de conversión InputStreamReaderpara resolver el problema distorsionado. La
codificación predeterminada de IDEA es UTF-8 y leer archivos GBK.
Inserte la descripción de la imagen aquí
Utilice el flujo de conversión para establecer la codificación de lectura como GBK
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");

@Test
public void Test3() throws IOException {
    
    

	  InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");
	   int read;
	   while((read=isr.read())!=-1){
    
    
	       System.out.println((char) read);
	       System.out.println(read);
	   }
	   isr.close();
}

输出结果:
你好
abc
哈哈哈

Escribir archivo

@Test
public void Test6() throws IOException {
    
    

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"GBK");
    osw.write("你好");
    osw.write("\r\n");
    osw.write("abc");
    osw.write("\r\n");
    osw.flush();
    osw.write("哈哈哈");
    osw.close();
}

Resultado: el formato de codificación es GBK


Inserte la descripción de la imagen aquí



InputStreamReader 类

El flujo de conversión java.io.InputStreamReader, una subclase de Reader, es un puente entre el flujo de bytes y el flujo de caracteres. Lee bytes y los decodifica en caracteres usando el juego de caracteres especificado. Su juego de caracteres se puede especificar por el nombre, o puede aceptar el juego de caracteres predeterminado de la plataforma.

Método de construcción

  • InputStreamReader(InputStream in): Crea una secuencia de caracteres utilizando el juego de caracteres predeterminado.
  • InputStreamReader(InputStream in, String charsetName): Crea una secuencia de caracteres con un conjunto de caracteres especificado.

OutputStreamWriter 类

El flujo de conversión java.io.OutputStreamWriter, una subclase de Writer, es un puente entre el flujo de caracteres y el flujo de bytes. Utilice el juego de caracteres especificado para codificar caracteres en bytes. Su juego de caracteres se puede especificar por el nombre, o puede aceptar el juego de caracteres predeterminado de la plataforma.

Método de construcción

  • OutputStreamWriter(OutputStream in): Crea una secuencia de caracteres utilizando el juego de caracteres predeterminado.
  • OutputStreamWriter(OutputStream in, String charsetName): Crea una secuencia de caracteres con un conjunto de caracteres especificado.

Supongo que te gusta

Origin blog.csdn.net/ren9436/article/details/108165249
Recomendado
Clasificación