Класс Charset
- java.lang.Object
-
- java.nio.charset.Charset
- Все реализуемые интерфейсы:
- Comparable<Charset>
public abstract class Charset extends Object implements Comparable<Charset>
Именованное отображение последовательностей шестнадцатибитных юникодовых единиц кода и последовательностей байтов. Этот класс определяет методы для создания декодеров и кодеров, а также для получения различных имён, связанных с кодировкой символов. Экземпляры этого класса неизменяемы.
Этот класс также определяет статические методы для проверки поддержки конкретной кодировки символов, для поиска экземпляров кодировки символов по имени и для построения карты, содержащей каждую кодировку символов, для которой доступна поддержка в текущей виртуальной машине Java. Поддержка новых кодировок символов может быть добавлена через интерфейс поставщика услуг, определённый в CharsetProvider классе.
Все методы, определённые в этом классе, безопасны для использования несколькими одновременными потоками.
Имена кодировок символов
Кодировки символов имеют имена, состоящие из следующих символов:
- Заглавные буквы от
'A'до'Z'('\u0041'до'\u005a'), - Строчные буквы от
'a'до'z'('\u0061'до'\u007a'), - Цифры от
'0'до'9'('\u0030'до'\u0039'), - Дефис
'-'('\u002d', ТИРЕ), - Плюс
'+'('\u002b', ПЛЮС), - Точка
'.'('\u002e', ТОЧКА), - Двоеточие
':'('\u003a', ДВОЕТОЧИЕ), и - Подчеркивание
'_'('\u005f', НИЖНЕЕ ПОДЧЁРКИВАНИЕ).
Каждая кодировка символов имеет каноническое имя и может также иметь одно или несколько псевдонимов. Каноническое имя возвращается методом name этого класса. Канонические имена, как правило, записываются заглавными буквами. Псевдонимы кодировки символов возвращаются методом aliases.
Некоторые кодировки символов имеют историческое имя, которое определено для совместимости с предыдущими версиями платформы Java. Историческое имя кодировки символов — это либо её каноническое имя, либо один из её псевдонимов. Историческое имя возвращается методами getEncoding() классов InputStreamReader и OutputStreamWriter.
Если кодировка символов, перечисленных в реестре кодировок символов IANA, поддерживается реализацией платформы Java, то её каноническое имя должно совпадать с именем в реестре. Многие кодировки символов имеют несколько имён в реестре, при этом реестр идентифицирует одно из имён как предпочтительное MIME. Если кодировка символов имеет более одного имени в реестре, то её каноническое имя должно быть предпочтительным именем MIME, а другие имена в реестре должны быть допустимыми псевдонимами. Если поддерживаемая кодировка символов не указана в реестре IANA, то её каноническое имя должно начинаться с одной из строк "X-" или "x-".
Реестр кодировок символов IANA со временем изменяется, поэтому каноническое имя и псевдонимы конкретной кодировки символов также могут меняться со временем. Для обеспечения совместимости рекомендуется не удалять псевдоним кодировки символов и, если каноническое имя кодировки символов изменено, сделать её предыдущее каноническое имя псевдонимом.
Стандартные кодировки символов
Каждая реализация платформы Java обязана поддерживать следующие стандартные кодировки символов. Обратитесь к документации к релизу вашей реализации, чтобы узнать, поддерживаются ли другие кодировки символов. Поведение таких необязательных кодировок символов может отличаться в разных реализациях.
| Кодировка символов | Описание |
|---|---|
US-ASCII | Семибитный ASCII, также известный как ISO646-US, также как базовая латинская область набора символов Unicode |
ISO-8859-1 | ISO Латинский алфавит № 1, также известный как ISO-LATIN-1
|
UTF-8 | Восьмибитный UCS Transformation Format |
UTF-16BE | Шестнадцатибитный UCS Transformation Format, большой порядок байтов |
UTF-16LE | Шестнадцатибитный UCS Transformation Format, малый порядок байтов |
UTF-16 | Шестнадцатибитный UCS Transformation Format, порядок байтов определяется необязательной меткой порядка байтов |
Кодировка символов UTF-8 задана в RFC 2279; формат преобразования, на котором она основана, задан в поправке 2 к ISO 10646-1 и также описан в стандарте Unicode.
Кодировки символов UTF-16 заданы в RFC 2781; форматы преобразования, на которых они основаны, заданы в поправке 1 к ISO 10646-1 и также описаны в стандарте Unicode.
Кодировки символов UTF-16 используют шестнадцатибитные величины и поэтому чувствительны к порядку байтов. В этих кодировках порядок байтов потока может указываться начальной меткой порядка байтов, представленной символом Unicode '\uFEFF'. Метки порядка байтов обрабатываются следующим образом:
При декодировании кодировки символов
UTF-16BEиUTF-16LEинтерпретируют начальные метки порядка байтов как ПРОБЕЛ НУЛЕВОЙ ШИРИНЫ НЕРАЗРЫВНЫЙ; при кодировании они не записывают метки порядка байтов.При декодировании кодировка символов
UTF-16интерпретирует метку порядка байтов в начале входного потока, чтобы указать порядок байтов потока, но по умолчанию использует большой порядок байтов, если метка порядка байтов отсутствует; при кодировании она использует большой порядок байтов и записывает метку порядка байтов с большим порядком байтов.
Каждая виртуальная машина Java имеет кодировку символов по умолчанию, которая может или не может быть одной из стандартных кодировок символов. Кодировка символов по умолчанию определяется при запуске виртуальной машины и, как правило, зависит от локали и кодировки символов, используемых базовой операционной системой.
Класс StandardCharsets определяет константы для каждой из стандартных кодировок символов.
Терминология
Название этого класса взято из терминов, используемых в RFC 2278. В этом документе кодировка символов определяется как сочетание одного или нескольких наборов символов и схемы кодирования символов. (Это определение запутанное; в некоторых других системах программного обеспечения кодировка символов определяется как синоним набора символов).
Набор символов — это отображение между набором абстрактных символов и набором целых чисел. US-ASCII, ISO 8859-1, JIS X 0201 и Unicode являются примерами наборов символов.
Некоторые стандарты определили набор символов как просто набор абстрактных символов без соответствующего присвоенного номера. Алфавит является примером такого набора символов. Однако тонкое различие между набором символов и набором кодированных символов редко используется на практике; первый стал сокращённой формой для второго, включая в спецификации API Java.
Схема кодирования символов — это отображение между одним или несколькими наборами кодированных символов и набором последовательностей октетов (восьмибитных байтов). UTF-8, UTF-16, ISO 2022 и EUC являются примерами схем кодирования символов. Схемы кодирования часто ассоциируются с конкретным набором кодированных символов; например, UTF-8 используется только для кодирования Unicode. Однако некоторые схемы ассоциируются с несколькими наборами кодированных символов; например, EUC может использоваться для кодирования символов в различных азиатских наборах кодированных символов.
Когда набор кодированных символов используется исключительно с одной схемой кодирования символов, то соответствующая кодировка символов обычно называется по имени набора кодированных символов; в противном случае кодировка символов обычно называется по имени схемы кодирования и, возможно, по локали наборов кодированных символов, которые она поддерживает. Таким образом, US-ASCII — это одновременно имя набора кодированных символов и кодировки символов, которая его кодирует, в то время как EUC-JP — это имя кодировки символов, которая кодирует наборы кодированных символов JIS X 0201, JIS X 0208 и JIS X 0212 для японского языка.
Встроенной кодировкой символов языка программирования Java является UTF-16. Поэтому кодировка символов в платформе Java определяет отображение между последовательностями шестнадцатибитных юникодовых единиц UTF-16 (то есть последовательностями символов) и последовательностями байтов.
- С момента:
- 1.4
- См. также:
-
CharsetDecoder,CharsetEncoder,CharsetProvider,Character
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
Charset(String canonicalName,
String[] aliases) Инициализирует новую кодировку символов с заданным каноническим именем и набором псевдонимов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
Set<String> |
aliases() Возвращает множество, содержащее псевдонимы этого набора символов. |
static SortedMap<String,Charset> |
availableCharsets() Создаёт отсортированную карту из канонических имён наборов символов к объектам наборов символов. |
boolean |
canEncode() Указывает, поддерживает ли этот набор символов кодирование. |
int |
compareTo(Charset that) Сравнивает этот набор символов с другим. |
abstract boolean |
contains(Charset cs) Указывает, содержит ли этот набор символов указанный набор символов. |
CharBuffer |
decode(ByteBuffer bb) Удобный метод, декодирующий байты в этом наборе символов в символы Юникода. |
static Charset |
defaultCharset() Возвращает стандартный набор символов этой виртуальной машины Java. |
String |
displayName() Возвращает удобочитаемое имя этого набора символов для стандартного языка. |
String |
displayName(Locale locale) Возвращает удобочитаемое имя этого набора символов для заданного языка. |
ByteBuffer |
encode(CharBuffer cb) Удобный метод, кодирующий символы Юникода в байты в этом наборе символов. |
ByteBuffer |
encode(String str) Удобный метод, кодирующий строку в байты в этом наборе символов. |
boolean |
equals(Object ob) Указывает, равен ли этот объект другому. |
static Charset |
forName(String charsetName) Возвращает объект набора символов для заданного набора символов. |
int |
hashCode() Вычисляет хэш-код для этого набора символов. |
boolean |
isRegistered() Указывает, зарегистрирован ли этот набор символов в реестре наборов символов IANA. |
static boolean |
isSupported(String charsetName) Указывает, поддерживается ли заданный набор символов. |
String |
name() Возвращает каноническое имя этого набора символов. |
abstract CharsetDecoder |
newDecoder() Создаёт новый декодер для этого набора символов. |
abstract CharsetEncoder |
newEncoder() Создаёт новый кодировщик для этого набора символов. |
String |
toString() Возвращает строку, описывающую этот набор символов. |
Методы, унаследованные от класса java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
Charset
protected Charset(String canonicalName,
String[] aliases) Инициализирует новый набор символов с заданным каноническим именем и набором псевдонимов.
- Параметры:
-
canonicalName- Каноническое имя этого набора символов -
aliases- Массив псевдонимов этого набора символов или null, если псевдонимов нет - Исключения:
-
IllegalCharsetNameException- Если каноническое имя или любой из псевдонимов являются недопустимыми
Методы
isSupported
public static boolean isSupported(String charsetName)
Определяет, поддерживается ли указанный набор символов.
- Параметры:
-
charsetName- Имя запрошенного набора символов; может быть каноническим именем или псевдонимом - Возвращает:
-
trueтогда и только тогда, когда поддержка указанного набора символов доступна в текущей виртуальной машине Java - Исключения:
-
IllegalCharsetNameException- Если заданное имя набора символов является недопустимым -
IllegalArgumentException- Если заданноеcharsetNameимеет значение null
forName
public static Charset forName(String charsetName)
Возвращает объект набора символов для указанного набора символов.
- Параметры:
-
charsetName- Имя запрошенного набора символов; может быть каноническим именем или псевдонимом - Возвращает:
- Объект набора символов для указанного набора символов
- Исключения:
-
IllegalCharsetNameException- Если заданное имя набора символов является недопустимым -
IllegalArgumentException- Если заданноеcharsetNameимеет значение null -
UnsupportedCharsetException- Если поддержка указанного набора символов недоступна в данной виртуальной машине Java
availableCharsets
public static SortedMap<String,Charset> availableCharsets()
Создаёт отсортированную карту из канонических имён наборов символов к объектам наборов символов.
Карта, возвращаемая этим методом, будет содержать одну запись для каждого набора символов, для которого доступна поддержка в текущей виртуальной машине Java. Если два или более поддерживаемых набора символов имеют одинаковое каноническое имя, то результирующая карта будет содержать только один из них; какой из них будет содержаться, не определено.
Вызов этого метода и последующее использование результирующей карты могут привести к выполнению ресурсоёмких операций ввода-вывода с диском или сетью. Этот метод предоставляется для приложений, которым необходимо перечислить все доступные наборы символов, например, для разрешения выбора набора символов пользователем. Этот метод не используется методом forName, который вместо этого использует эффективный алгоритм инкрементного поиска.
Этот метод может возвращать разные результаты в разное время, если к текущей виртуальной машине Java динамически добавляются новые поставщики наборов символов. При отсутствии таких изменений, наборы символов, возвращаемые этим методом, точно соответствуют тем, которые можно получить с помощью метода forName.
- Возвращает:
- Неизменяемая карта, игнорирующая регистр, из канонических имён наборов символов к объектам наборов символов
defaultCharset
public static Charset defaultCharset()
Возвращает набор символов по умолчанию для этой виртуальной машины Java.
Набор символов по умолчанию определяется во время запуска виртуальной машины и обычно зависит от языка и набора символов базовой операционной системы.
- Возвращает:
- Объект набора символов для набора символов по умолчанию
- С:
- 1.5
name
public final String name()
Возвращает каноническое имя этого набора символов.
- Возвращает:
- Каноническое имя этого набора символов
aliases
public final Set<String> aliases()
Возвращает набор, содержащий псевдонимы этого набора символов.
- Возвращает:
- Неизменяемый набор псевдонимов этого набора символов
displayName
public String displayName()
Возвращает удобочитаемое имя этого набора символов для набора символов по умолчанию.
Предположительное выполнение этого метода просто возвращает каноническое имя этого набора символов. Конкретные подклассы этого класса могут переопределить этот метод, чтобы предоставить локализованное отображаемое имя.
- Возвращает:
- Отображаемое имя этого набора символов в наборе символов по умолчанию
isRegistered
public final boolean isRegistered()
Определяет, зарегистрирован ли этот набор символов в реестре наборов символов IANA.
- Возвращает:
-
trueесли и только если этот набор символов известен своему реализатору как зарегистрированный в IANA
displayName
public String displayName(Locale locale)
Возвращает удобочитаемое имя этого набора символов для заданного набора символов.
Предположительное выполнение этого метода просто возвращает каноническое имя этого набора символов. Конкретные подклассы этого класса могут переопределить этот метод, чтобы предоставить локализованное отображаемое имя.
- Параметры:
-
locale- Набор символов, для которого требуется отображаемое имя - Возвращает:
- Отображаемое имя этого набора символов в заданном наборе символов
contains
public abstract boolean contains(Charset cs)
Определяет, содержит ли этот набор символов указанный набор символов.
Набор символов C считается содержащим набор символов D, если и только если каждый символ, представимый в D, также представим в C. Если это соотношение выполняется, гарантируется, что любая строка, которая может быть закодирована в D, также может быть закодирована в C без выполнения каких-либо замен.
Что C содержит D, не означает, что каждый символ, представимый в C определённой последовательностью байтов, представляется в D той же последовательностью байтов, хотя иногда это так.
Каждый набор символов содержит сам себя.
Этот метод вычисляет приближение отношения включения: Если он возвращает true , то указанный набор символов известен как содержащийся в этом наборе символов; если он возвращает false, то это не обязательно означает, что указанный набор символов не содержится в этом наборе символов.
- Параметры:
-
cs- Указанный набор символов - Возвращает:
-
trueесли указанный набор символов содержится в этом наборе символов
newDecoder
public abstract CharsetDecoder newDecoder()
Создаёт новый декодер для этого набора символов.
- Возвращает:
- Новый декодер для этого набора символов
newEncoder
public abstract CharsetEncoder newEncoder()
Создаёт новый кодировщик для этого набора символов.
- Возвращает:
- Новый кодировщик для этого набора символов
- Исключения:
-
UnsupportedOperationException- Если этот набор символов не поддерживает кодирование
canEncode
public boolean canEncode()
Определяет, поддерживает ли этот набор символов кодирование.
Почти все наборы символов поддерживают кодирование. Основные исключения — наборы символов специального назначения «автоматического определения», декодеры которых могут определить, какая из нескольких возможных схем кодирования используется, проанализировав последовательность входных байтов. Такие наборы символов не поддерживают кодирование, поскольку нет способа определить, какая схема кодирования должна использоваться на выходе. Реализации таких наборов символов должны переопределить этот метод, чтобы вернуть false.
- Возвращает:
-
trueесли и только если этот набор символов поддерживает кодирование
decode
public final CharBuffer decode(ByteBuffer bb)
Удобный метод, который декодирует байты в этом наборе символов в символы Юникода.
Вызов этого метода для набора символов cs возвращает тот же результат, что и выражение
cs.newDecoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE)
.decode(bb); за исключением того, что он потенциально более эффективен, поскольку может кэшировать декодеры между последовательными вызовами. Этот метод всегда заменяет неправильные входные данные и символы, не отображаемые в последовательности байтов, по умолчанию для этого набора символов. Чтобы обнаружить такие последовательности, используйте метод CharsetDecoder.decode(java.nio.ByteBuffer) напрямую.
- Параметры:
-
bb- Буфер байтов, который должен быть декодирован - Возвращает:
- Буфер символов, содержащий декодированные символы
encode
public final ByteBuffer encode(CharBuffer cb)
Удобный метод, который кодирует символы Юникода в байты в этом наборе символов.
Вызов этого метода для набора символов cs возвращает тот же результат, что и выражение
cs.newEncoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE)
.encode(bb); за исключением того, что он потенциально более эффективен, поскольку может кэшировать кодировщики между последовательными вызовами. Этот метод всегда заменяет неправильные входные данные и символы, не отображаемые в строке по умолчанию для этого набора символов. Чтобы обнаружить такие последовательности, используйте метод CharsetEncoder.encode(java.nio.CharBuffer) напрямую.
- Параметры:
-
cb- Буфер символов, который должен быть закодирован - Возвращает:
- Буфер байтов, содержащий закодированные символы
encode
public final ByteBuffer encode(String str)
Удобный метод, который кодирует строку в байты в этом наборе символов.
Вызов этого метода для набора символов cs возвращает тот же результат, что и выражение
cs.encode(CharBuffer.wrap(s));
- Параметры:
-
str- Строка, которая должна быть закодирована - Возвращает:
- Буфер байтов, содержащий закодированные символы
compareTo
public final int compareTo(Charset that)
Сравнивает этот набор символов с другим.
Наборы символов упорядочиваются по их каноническим именам без учёта регистра.
- Определено:
-
compareToв интерфейсеComparable<Charset> - Параметры:
-
that- Набор символов, с которым сравнивается этот набор символов - Возвращает:
- Отрицательное целое число, ноль или положительное целое число, в зависимости от того, меньше, равно или больше, чем указанный набор символов
hashCode
public final int hashCode()
Вычисляет хэш-код для этого набора символов.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- Целое число хэш-кода
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
equals
public final boolean equals(Object ob)
Определяет, равен ли этот объект другому.
Два набора символов равны, если и только если у них одинаковые канонические имена. Набор символов никогда не равен любому другому типу объекта.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
ob- Ссылаемый объект для сравнения. - Возвращает:
-
trueесли и только если этот набор символов равен заданному объекту - См. также:
-
Object.hashCode(),HashMap
toString
public final String toString()
Возвращает строку, описывающую этот набор символов.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.