Spec-Zone.ru › OpenJDK 8

Класс 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', НИЖНЕЕ ПОДЧЁРКИВАНИЕ).
Имя кодировки символов должно начинаться с буквы или цифры. Пустая строка не является допустимым именем кодировки символов. Имена кодировок символов нечувствительны к регистру; то есть регистр всегда игнорируется при сравнении имён кодировок символов. Имена кодировок символов обычно следуют соглашениям, описанным в RFC 2278: Процедуры регистрации кодировок символов IANA.

Каждая кодировка символов имеет каноническое имя и может также иметь одно или несколько псевдонимов. Каноническое имя возвращается методом 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()

Возвращает строку, описывающую этот набор символов.

Переопределяет:
toString в классе Object
Возвращает:
Строка, описывающая этот набор символов

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API