2016-09-28 3 views
3

Почему методы Java String.toCharArray() и new String(char[]) принимают кодировку кодировки?Почему Java `String.toCharArray()` и `new String (char [])` методы принимают кодировку кодировки?

Если вы используете byte[], вы можете указать кодировку с использованием String.getBytes(charset) и new String(byte[], charset).

Мне было интересно, есть ли что-то около char[] и кодировки кодировки. Я не понимаю. Ничто особенное в Javadocs, кажется, не объясняет разницу.

+2

Что такое 'char'? –

+0

это базовый тип Java –

+2

Ну, да. Но что он представляет? –

ответ

7

Эти методы не выполняют кодировку, они просто представляют собой копию внутреннего состояния экземпляра String.

Кодирование - это процесс преобразования логических глифов в числовое представление, последовательность байтов. Подумайте о String как о представлении последовательности символов Unicode. Класс String имеет API-интерфейсы для доступа к этим глифам в виде 32-битных кодовых точек или в виде серии из 16-разрядных значений, кодированных с помощью UTF-16-BE (который, как правило, является внутренним представлением строки) или в виде серии байтов в выбранной кодировке. Вам нужно указать только кодировку в последнем случае.

Некоторые кодировки, такие как UTF-8, поддерживают все символы Юникода, в то время как многие другие, такие как US-ASCII, поддерживают только крошечное подмножество. API-интерфейсы char[] не позволяют указывать другую кодировку (UTF-16-LE или UTF-16 с спецификацией), потому что одного достаточно, а содействие единообразию сводит к минимуму ошибки из несовпадающих кодировок.

+0

А так, 'toCharArray' будет внутренним UTF-16 Java? –

+1

@ JonathanS.Fisher Да, точно. – erickson