Какая кодировка по умолчанию для JVM?

Является ли UTF-8 кодировкой по умолчанию в Java?
Если нет, как я могу узнать, какая кодировка используется по умолчанию?

Ответы на вопрос(6)

Чтобы получить настройки Java по умолчанию, просто используйте:

java -XshowSettings 

Вы можете использовать это, чтобы распечатать 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

Набор символов по умолчанию в JVM соответствует системе, в которой он работает. Для этого нет конкретного значения, и вы, как правило, не должны зависеть от того, какой кодировкой по умолчанию является какое-либо конкретное значение.

Это может быть доступно во время выполнения черезCharset.defaultCharset()если это вам пригодится, хотя на самом деле вы должныalways specifying encoding explicitly когда ты сможешь это сделать.

 28 мар. 2018 г., 14:27
Неправильно. ПроверьтеCharset.defaultCharset() исходный код. Это читаетfile.encoding свойство, иначе использует UTF-8.
 12 янв. 2012 г., 13:30
UTF-16 - это то, как текст представлен внутри JVM. Кодировка по умолчанию определяет, как JVM интерпретирует байты, прочитанные из файлов (используяFileReader, например).
 03 нояб. 2011 г., 17:11
Если вы правы, я нахожу это немного страннымjava.sun.com/javase/technologies/core/basic/intl/… говорит, что это всегда UTF-16.
 22 янв. 2016 г., 20:31
Этот ответ является правильным, но для справки, в Linux он обычно «UTF-8», а в Windows он обычно «cp1252».
 26 янв. 2017 г., 10:02
Я только что испытал установку Linux, которая сообщает UTF-8 из локали, но java говорит US-ASCII.

Обратите внимание, что вы можете изменить кодировку JVM по умолчанию, используя свойство с неопределенным именемfile.encoding.

Если ваше приложение особенно чувствительно к кодировкам (возможно, из-за использования API-интерфейсов, подразумевающих кодировки по умолчанию), вам следует явно установить для этого параметра при запуске JVM постоянное (известное) значение.

 25 февр. 2010 г., 13:38
Обратите внимание, чтоfile.encoding должен быть указан при запуске JVM (то есть как параметр cmdline -Dfile.encoding или через JAVA_TOOLS_OPTIONS); Вы можете установить его во время выполнения, но это не будет иметь значения. Увидетьstackoverflow.com/questions/361975/…

Я уверен, что это зависит от реализации JVM, но я смог "повлиять" на файл.encoding моей JVM по умолчанию, выполнив:

export LC_ALL=en_US.UTF-8

(работает на Java версии 1.7.0_80 в Ubuntu 12.04)

Кроме того, если вы введете "локаль" с вашей консоли Unix вы должны увидеть больше информации там.

Весь кредит идет наhttp://www.philvarner.com/2009/10/24/unicode-in-java-default-charset-part-4/

 25 мая 2018 г., 21:05
 25 мая 2018 г., 21:01
@ArtemNovikov - да, но каково значение по умолчаниюfile.encoding? Он инициализирован вjava.lang.System.initProperties основанный на значенииsprops.encoding, гдеsprops это структура, возвращенная нативной функциейGetJavaProperties(), реализация которой варьируется в зависимости от платформы. В версии Windows, например, он вызываетGetUserDefaultLCID() а потомGetLocaleInfo (lcid, LOCALE_IDEFAULTANSICODEPAGE, ...) найти кодовую страницу ANSI пользователя по умолчанию и использовать ее. На платформах Unix он анализирует возвратsetlocale(LC_CTYPE, NULL).
 28 мар. 2018 г., 15:19
Как вы это проверили? Я не могу найти доказательства того, что Java обращает какое-либо внимание на кодировку в строке локали. Только изfile.encoding имущество.

Есть три "по умолчанию" кодировок:

file.encoding:
System.getProperty("file.encoding")

java.nio.Charset:
Charset.defaultCharset()

And the encoding of the InputStreamReader:
InputStreamReader.getEncoding()

Вы можете прочитать больше об этом наэта страница.

Ваш ответ на вопрос