Unicode escape синтаксис в Java

в Java я узнал, что следующий синтаксис может использоваться для упоминания символов Юникода, которые не находятся на клавиатуре (например. символы, отличные от ASCII):

(u)(u)*(HexDigit)(HexDigit)(HexDigit)(HexDigit)

мой вопрос: Какова цель (u)* в приведенном выше синтаксисе?

один вариант использования, который я понял, который представляет символ иены в Java:

char ch = 'u00A5';

2 ответов


интересный вопрос. раздел 3.3 JSL говорит:

UnicodeEscape:
    \ UnicodeMarker HexDigit HexDigit HexDigit HexDigit

UnicodeMarker:
    u
    UnicodeMarker u

что означает \u+\p{XDigit}{4}

и

если за подходящим \ следует u или более одного u, а за последним u не следуют четыре шестнадцатеричные цифры, возникает ошибка времени компиляции.

Итак, вы правы, может быть один или несколько u после обратной косой черты. Причина приведена ниже:

язык программирования Java определяет стандартный способ преобразования программы, написанной в Юникоде, в ASCII, который изменяет программу в форму, которая может быть обработана инструментами на основе ASCII. Преобразование включает преобразование любых эскапов Unicode в исходном тексте программы в ASCII путем добавления дополнительного u - например, \uxxxx становится \uuxxxx-при одновременном преобразовании символов, отличных от ASCII в исходном тексте, в эскапады Unicode, содержащие по одному u каждый.

эта преобразованная версия одинаково приемлема для компилятора Java и представляет собой ту же самую программу. Точный источник Юникода позже может быть восстановлен из этой формы ASCII путем преобразования каждой escape-последовательности, в которой присутствуют несколько u, в последовательность символов Юникода с одним меньшим u, одновременно Преобразуя каждую escape-последовательность с одним u в соответствующий один символ Юникода.

так это ввод

 \u0020ä

становится

 \uu0020\u00e4

первый uu означает здесь "это была escape-последовательность unicode для начала" , а второй u говорит " автоматический инструмент преобразовал символ без ASCII в escape-код unicode."

эта информация полезна, когда вы хотите преобразовать обратно из ASCII в unicode: вы можете восстановить как можно больше исходного кода.


Это означает, что вы можете добавить столько u Как вы хотите - например, эти строки эквивалентны:

char ch = '\u00A5';
char ch = '\uuuuu00A5';
char ch = '\uuuuuuuuuuuuuuuuuu00A5';

(и компилировать)