Java Unicode, где найти пример N-байтовых символов Unicode - PullRequest
6 голосов
/ 19 мая 2011

Я ищу образцы 1-байтовых, 2-байтовых, 3-байтовых, 4-байтовых, 5-байтовых и 6-байтовых символов Unicode. Будем весьма благодарны за любые ссылки на какие-либо ссылки на все различные символы Юникода и их размеры (в байтовом выражении). Я надеюсь, что эта ссылка также имеет кодовые точки, такие как \uXXXXX.

Ответы [ 3 ]

8 голосов
/ 19 мая 2011

Нет такой вещи, как «1-байтовые, 2-байтовые, 3-байтовые, 4-байтовые, 5-байтовые и 6-байтовые символы Unicode».

Вы, вероятно, говорите о UTF-8 представлениях символов Unicode.Точно так же строки в Java внутренне представлены в UTF-16, так что тип Java char представляет 16-битную кодовую единицу UTF-16, и каждый символ Unicode может быть представлен одной или двумя этими кодовыми единицами, и каждаякодовая единица может быть представлена ​​как \uxxxx в строковых литералах (обратите внимание, что в этих последовательностях есть только 4 шестнадцатеричных цифры, поскольку кодовые единицы имеют длину 16 бит).

Итак, если вам нужна ссылка на Unicodeсимволы с их представлениями UTF-8 и UTF-16, вы можете взглянуть на таблицу в fileformat.info .

См. также:

7 голосов
/ 20 мая 2011

Как указывает axtavt, концепция n-байтовых символов Unicode не имеет смысла; если вы имеете в виду UTF-8, то очень простая таблица, которая может помочь вам с тестированием и т. д., может выглядеть следующим образом. Обратите внимание, что все примеры символов работают в моем браузере (Chrome в Ubuntu), но ваш пробег может отличаться в зависимости от отображения, копирования / вставки и т. Д.

UTF-8 bytes  Start    End       Example Character
1            U+0000   U+007F    ! EXCLAMATION MARK U+0021)
2            U+0080   U+07FF    ¶ PILCROW SIGN (U+00B6)
3            U+0800   U+FFFF    ‱ PER TEN THOUSAND SIGN (U+2031)
4            U+10000  U+1FFFFF  ??? MUSICAL SYMBOL SIXTEENTH NOTE (U+1D161)

Теоретически в UTF-8 могут быть 5- или 6-байтовые значения, но 32-битное адресное пространство Unicode в действительности ограничено максимумом 10FFFF, поэтому более 4 байтов не требуется.

Обратите внимание, что здесь есть важное предупреждение: Java char - это , а не символ Unicode; это 16-битная кодовая единица UTF-16, и весьма часто можно видеть потоки данных, которые обрабатывают не-BMP-символ (как U + 1D161 выше) как 2 символа, и UTF-8 это соответственно. Например:

Character: U+1D161
UTF-8 encoding: 0xF0 0x9D 0x85 0xA1
UTF-16 encoding: 0xD834 0xDD61
UTF-16 code points individually encoded as UTF-8: 0xED 0xA0 0xB4 0xED 0xB5 0xA1

Обратите внимание, что это имеет эффект , по-видимому , показывая 6-байтовый символ UTF-8, но на самом деле это не разрешено UTF-8. UTF-8 должен быть кодированием исходных кодовых точек, а не кодированием кодовых единиц UTF-16, которые представляют эти точки. Это не значит, что вы не видите это в дикой природе, хотя ...

3 голосов
/ 19 мая 2011
...