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" в этом сценарии представляет символ?
Ответы
Ответ 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