Подтвердить что ты не робот

Java Charset.forName( "ASCII" ) или Charset.forName( "US-ASCII" )

Я просматривал код и наткнулся на следующую строку.

Charset.forName("ASCII")

Но когда я посмотрел на java документацию, он только

US-ASCII    ISO-8859-1    UTF-8   UTF-16BE   UTF-16LE   UTF-16  

Но код работает. "ASCII" и "US-ASCII" являются синонимами в этом контексте? или это код принимает значение по умолчанию, так как "ASCII" не распознается? И сколько байтов "ASCII" в этом сценарии представляет символ?

4b9b3361

Ответ 1

В документации указывается:

Каждая кодировка имеет каноническое имя и может также иметь один или несколько псевдонимы. Каноническое имя возвращается методом name этого класс. Канонические имена, как правило, обычно в верхнем регистре. псевдонимы кодировки возвращаются методом псевдонимов.

Далее, javadoc Charset.forName(String charsetName) сообщает вам:

charsetName - имя запрошенной кодировки; может быть либо каноническое имя или псевдоним

С помощью этого кода вы можете узнать больше о кодировках:

Charset ascii = Charset.forName("US-ASCII");
System.out.println(ascii.aliases());
// [ANSI_X3.4-1968, cp367, csASCII, iso-ir-6, ASCII, iso_646.irv:1983, ANSI_X3.4-1986, ascii7, default, ISO_646.irv:1991, ISO646-US, IBM367, 646, us]

System.out.println(ascii.newEncoder().maxBytesPerChar());
// 1.0

Charset utf8 = Charset.forName("UTF-8");
System.out.println(utf8.newEncoder().maxBytesPerChar());
// 3.0

Ответ 2

Запуск следующего фрагмента, печать всех доступных наборов символов:

    SortedMap<String,Charset> availableCharsets = Charset.availableCharsets();
    Set<String> keySet = availableCharsets.keySet();
    for (String key : keySet) {
        System.out.println(key);
    }

Я не вижу ASCII в списке. Глядя на код для defaultCharset() в классе Charset, показано, что если file.encoding является недопустимым, по умолчанию используется "utf-8".

Выполняя следующий фрагмент, печатает "UTF-8" в качестве кодировки по умолчанию.

    System.setProperty("file.encoding", "ASCII");
    System.out.println(Charset.defaultCharset());

Ответ 3

ASCII является псевдонимом для US-ASCII. Он использует 7-разрядный байт для каждого символа.

Примечание. Если вы хотите компактность и простоту, я предлагаю использовать ISO-8859-1. Это также использует 1 байт на символ, но имеет более широкий диапазон. Он поддерживает \u0000 до u00FF, тогда как US-ASCII поддерживает \u0000 - \u007F