¿Cómo obtener y establecer la codificación de caracteres predeterminada o juego de caracteres en Java?

La máquina virtual de Java (JVM) utiliza la codificación de caracteres predeterminada o juego de caracteres en Java para convertir bytes en una string de caracteres en ausencia de la propiedad del sistema java file.encoding . Durante el inicio de JVM, Java obtiene la codificación de caracteres llamando a System.getProperty(“file.encoding”,”UTF-8″) . En ausencia del atributo file.encoding , Java utiliza la codificación de caracteres «UTF-8» de forma predeterminada.

La codificación de caracteres básicamente interpreta una secuencia de bytes en una string de caracteres específicos. La misma combinación de bytes puede denotar diferentes caracteres en diferentes codificaciones de caracteres. Por lo tanto, la especificación de la codificación de caracteres correcta juega un papel importante. Java almacena en caché la codificación de caracteres en la mayoría de sus clases principales, lo que requiere la codificación de caracteres. Por lo tanto, llamar a System.setProperty(“file.encoding”, “UTF-16”) puede no tener el efecto deseado al usar InputStreamReader y otros paquetes de Java.

Obtener la codificación de caracteres predeterminada o Charset 

Hay varias formas de recuperar el conjunto de caracteres predeterminado en Java, a saber, de la siguiente manera:

Métodos:

  1. propiedad del sistema «file.encoding»
  2. java.nio.Juego de caracteres
  3. Código InputStreamReader.getEncoding()

Ahora permítanos resumirlos antes de invocarlos en la parte de implementación para obtener la codificación de caracteres predeterminada o Charset 

Método 1: propiedad del sistema «file.encoding»

System.getProperty(“file.encoding”) en Java devuelve el juego de caracteres predeterminado que se usa en la aplicación, en caso de que la JVM se inicie con la propiedad -Dfile.encoding o JavaScript no haya invocado explícitamente System.setProperty(“ file.encoding, encoding), donde se especifica el tipo de codificación. 

Método 2: java.nio.Charset

El paquete java proporciona un método estático para recuperar la codificación de caracteres predeterminada para traducir entre bytes y caracteres Unicode. El método Charset.defaultCharset() devuelve el conjunto de caracteres predeterminado que se está utilizando. 

Método 3: Código InputStreamReader.getEncoding()

El paquete InputStreamReader en Java utiliza un método getEncoding() que devuelve el nombre de la codificación de caracteres utilizada por este flujo.

Ejemplo:

Java

// Java Program to Get and Set
// Default Character encoding or Charset
 
// Importing input output classes
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
// Importing Charset class that defines charsets and
// translation between bytes and Unicode characters.
import java.nio.charset.Charset;
 
// Class 1
// Helper Class for character encoding
public class GFG {
 
    // Method
    // To
    public static String getCharacterEncoding()
    {
 
        // Creating an array of byte type chars and
        // passing random  alphabet as an argument.abstract
        // Say alphabet be 'w'
        byte[] byte_array = { 'w' };
 
        // Creating an object of InputStream
        InputStream instream
            = new ByteArrayInputStream(byte_array);
 
        // Now, opening new file input stream reader
        InputStreamReader streamreader
            = new InputStreamReader(instream);
        String defaultCharset = streamreader.getEncoding();
 
        // Returning default character encoding
        return defaultCharset;
    }
 
    // Main driver method
    public static void main(String args[])
        throws FileNotFoundException,
               UnsupportedEncodingException, IOException
    {
 
        // Method returns a string of character encoding
        // used by using System.getProperty()
        String defaultencoding
            = System.getProperty("file.encoding");
 
        System.out.println("Default Charset: "
                           + defaultencoding);
 
        // Getting character encoding by InputStreamReader
        System.out.println(
            "Default Charset by InputStreamReader: "
            + getCharacterEncoding());
 
        // Getting character encoding by java.nio.charset
        System.out.println("Default Charset: "
                           + Charset.defaultCharset());
    }
}

Producción:

Configuración de la codificación de caracteres predeterminada o Charset 

Métodos: Hay varias formas de especificar el valor del conjunto de caracteres predeterminado en Java. 

  • Usando la propiedad del sistema Java
  • Uso de JAVA_TOOLS_OPTIONS

Ahora permítanos resumirlos antes de invocarlos en la parte de implementación para obtener la codificación de caracteres predeterminada o Charset 

Método 1: usar la propiedad del sistema Java «file.encoding»

Al iniciar Java Virtual Machine, al proporcionar la propiedad del sistema file.encoding 

java -Dfile.encoding="UTF-8"  HelloWorld, we can specify UTF-8 charset.

Método 2: especificar la variable de entorno » JAVA_TOOLS_OPTIONS «.

En caso de que iniciemos, JVM se inicia utilizando algunos scripts y herramientas, el conjunto de caracteres predeterminado se puede configurar utilizando la variable de entorno JAVA_TOOL_OPTIONS en -Dfile.encoding = ”UTF-16” o cualquier otro que luego el programa utiliza cada vez que JVM se inicia en la máquina. Como resultado de este método, la consola se muestra de la siguiente manera:

«Recogió JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF16» para indicar el uso de JAVA_TOOS_OPTIONS. 

El siguiente fragmento indica la configuración de la codificación de caracteres predeterminada utilizando JAVA_TOOLS_OPTIONS:

test@system:~/java java HelloWorld
þÿExecuting HelloWorld
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF16

Ejemplo:

Java

// Java Program to Get and Set
// Default Character encoding or Charset
 
// Importing all input output classes
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
// Importing Charset class that defines charsets and
// translation between bytes and Unicode characters
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
 
// Class
// Class to encode characters
public class GFG {
 
    // Method 1
    // To encode the characters
    public static String getCharacterEncoding()
    {
 
        // Creating and initializing byte array
        // with some random character say it be N
 
        // Here N = w
        byte[] byte_array = { 'w' };
 
        // Creating an object of inputStream
        InputStream instream
            = new ByteArrayInputStream(byte_array);
 
        // Now, opening new file input stream reader
        InputStreamReader streamreader
            = new InputStreamReader(instream);
 
        String defaultCharset = streamreader.getEncoding();
 
        // Returning the default character encoded
        // Here it is for N = 'w'
        return defaultCharset;
    }
 
    // Method 2
    // Main driver method
    public static void main(String args[])
        throws FileNotFoundException,
               UnsupportedEncodingException, IOException
    {
 
        // Setting the file encoding explicitly
        // to a new value
        System.setProperty("file.encoding", "UTF-16");
 
        // Returns a string of character encoding
        // using the getProperty() method
        String defaultencoding
            = System.getProperty("file.encoding");
 
        // Return the above string of character encoded
        System.out.println("Default Charset: "
                           + defaultencoding);
 
        // Getting character encoding by InputStreamReader
        // using the getCharacterEncoding() method
        System.out.println(
            "Default Charset by InputStreamReader: "
            + getCharacterEncoding());
 
        // Getting character encoding by java.nio.charset
        // using the default charset() method
        System.out.println("Default Charset: "
                           + Charset.defaultCharset());
    }
}

Producción

Default Charset: UTF-16
Default Charset by InputStreamReader: UTF8
Default Charset: UTF-8

JVM conserva y almacena en caché la codificación del juego de caracteres predeterminado UTF-8 y, por lo tanto, no se reemplaza especificando la codificación de caracteres explícita UTF-16, es decir, System.setProperty()

Publicación traducida automáticamente

Artículo escrito por yippeee25 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *