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:
- Uso de la propiedad del sistema «file.encoding»
- Usando java.nio.Charset
- Usando el método Charset.defaultCharset()
Métodos:
- propiedad del sistema «file.encoding»
- java.nio.Juego de caracteres
- 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()