Какая кодировка по умолчанию для JVM?
UTF-8 является кодировкой по умолчанию в Java?
Если нет, как я могу узнать, какая кодировка используется по умолчанию?
7 ответов
Набор символов по умолчанию для JVM - это система, в которой он работает. Для этого нет особого значения, и вы не должны зависеть от того, какой кодировкой по умолчанию является какое-либо конкретное значение.
Это может быть доступно во время выполнения через Charset.defaultCharset()
Если это вам пригодится, хотя на самом деле вы должны всегда указывать кодировку явно, когда вы можете это сделать.
Обратите внимание, что вы можете изменить кодировку JVM по умолчанию, используя свойство с неопределенным именем file.encoding
,
Если ваше приложение особенно чувствительно к кодировкам (возможно, из-за использования API-интерфейсов, подразумевающих кодировки по умолчанию), вам следует явно установить для этого параметра при запуске JVM постоянное (известное) значение.
Чтобы получить настройки Java по умолчанию, просто используйте:
java -XshowSettings
Существует три кодировки по умолчанию:
file.encoding:
System.getProperty("file.encoding")
java.nio.Charset:
Charset.defaultCharset()
И кодировка InputStreamReader:
InputStreamReader.getEncoding()
Вы можете прочитать больше об этом на этой странице.
Я уверен, что это зависит от реализации JVM, но я смог "повлиять" на файл file.encoding моего JVM по умолчанию, выполнив:
export LC_ALL=en_US.UTF-8
(работает на Java версии 1.7.0_80 в Ubuntu 12.04)
Кроме того, если вы наберете "locale" из консоли Unix, вы должны увидеть больше информации там.
Вся заслуга принадлежит http://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/
Вы можете использовать это, чтобы распечатать JVM по умолчанию
import java.nio.charset.Charset;
import java.io.InputStreamReader;
import java.io.FileInputStream;
public class PrintCharSets {
public static void main(String[] args) throws Exception {
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Charset.defaultCharset=" + Charset.defaultCharset());
System.out.println("InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("./PrintCharSets.java")).getEncoding());
}
}
Скомпилируйте и запустите
javac PrintCharSets.java && java PrintCharSets
Это будет зависеть от локали. Другой язык, другая кодировка по умолчанию.