Как JVM определяет (по умолчанию?) Кодировку символов для argv в Linux
Java имееткодировка символов по умолчанию, который используется в тех случаях, когда кодировка символов не указана явно. Документация длякак он выбирает, что кодировка расплывчата:
Набор символов по умолчанию определяется во время запуска виртуальной машины и обычно зависит от локали и набора символов базовой операционной системы.
Эта документация должна быть расплывчатой, потому что метод, который использует JVM, зависит от конкретной системы.
Использование кодировки символов по умолчанию частоплохая идея; лучше использовать явно указанную кодировку или всегда использовать одну и ту же кодировку для некоторого ввода-вывода. Но одним неизбежным использованием кодировки символов по умолчанию может быть кодировка символов, используемая для аргументов командной строки. В системе POSIX, такой как Linux, собственный (C / C ++) код JVM получает аргументы командной строки в виде завершенного нулями списка C / C ++char
указатели. Который должен рассматриваться как указатель байтов, поскольку они должны кодировать кодовые точки вкаким-то (неясным) образом, JVM должна интерпретировать эти последовательности C / C ++char
s (байты), чтобы преобразовать их в последовательность Javachar
с, чтобы быть переданнымmain()
программы Java. Я предполагаю, что JVM использует кодировку символов по умолчанию для этого.
Поэтому мне нужно точно знать, как JVM определяет кодировку по умолчанию для конкретной системы (современная операционная система GNU / Linux), чтобы я мог предоставить пользователю документацию о том, как работает моя программа, и чтобы пользователи моей программы могли предсказать, как она будет вести себя.
Я предполагаю, что JVM исследует некоторые переменные среды, но какие?