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';
(и компилировать)