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 InputStreamReader
para resolver el problema distorsionado. La
codificación predeterminada de IDEA es UTF-8 y leer archivos GBK.
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
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.