¿Cómo determina la JVM la codificación de caracteres (predeterminada) para argv en Linux

Java tiene uncodificación de caracteres predeterminada, que utiliza en contextos donde la codificación de caracteres no se proporciona explícitamente. La documentación paracómo elige que la codificación es vaga:

El conjunto de caracteres predeterminado se determina durante el inicio de la máquina virtual y, por lo general, depende de la configuración regional y el conjunto de caracteres del sistema operativo subyacente.

Esa documentación tiene que ser vaga porque el método que utiliza la JVM es específico del sistema.

El uso de la codificación de caracteres predeterminada suele seruna mala idea; es mejor usar una codificación explícitamente indicada, o usar siempre la misma codificación para algunas E / S. Pero un uso inevitable de la codificación de caracteres predeterminada parece ser la codificación de caracteres utilizada para los argumentos de la línea de comandos. En un sistema POSIX como Linux, el código nativo (C / C ++) de la JVM obtiene los argumentos de la línea de comandos como una lista terminada nula de C / C ++char punteros Que deberían considerarse punteros de bytes, ya que deben codificar puntos de código enalguna manera (poco clara). La JVM tiene que interpretar esas secuencias de C / C ++chars (bytes) para convertirlos en una secuencia de Javachars, para ser dado a lamain() del programa Java. Supongo que la JVM usa la codificación de caracteres predeterminada para esto.

Por lo tanto, necesito saber con precisión cómo la JVM determina la codificación predeterminada para un sistema en particular (un sistema operativo GNU / Linux moderno), para poder proporcionar documentación del usuario sobre cómo se comportan mis programas, y para que los usuarios de mi programa puedan predecir cómo Se comportará.

Supongo que la JVM examina algunas variables de entorno, pero ¿cuáles?

Respuestas a la pregunta(1)

Su respuesta a la pregunta