Java, JavaCC: как анализировать символы вне BMP? - PullRequest
5 голосов
/ 20 мая 2010

Я имею в виду спецификацию XML 1.1 .

Посмотрите на определение NameStartChar:

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

Если я правильно интерпретирую это, последний диапазон (#x10000-#xEFFFF) выходит за пределы UTF16 диапазона типа Java char. Значит, это должно быть UTF32 , верно? Итак, мне нужно проверить пары char по этому диапазону, а не одиночные char с, верно?

Мои вопросы:

  • Как проверить наличие таких диапазонов символов с помощью стандартных методов Java?
  • Как можно определить такие диапазоны в JavaCC?
    • JavaCC жалуется на \u10000 и \uEFFFF

Спасибо!

ПРИМЕЧАНИЕ: Не волнуйтесь, я не пытаюсь написать собственный XML-парсер.
РЕДАКТИРОВАТЬ: Я пишу парсер, который будет проверять, будет ли ввод текста из разных (не XML) текстовых форматов соответствовать действительные имена XML.

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Взгляните на Character.toCodePoint(char, char), который преобразует суррогатную пару в кодовую точку полного диапазона. String.codePointAt тоже может пригодиться вам.

Существует много другой суррогатной поддержки в Character и String. Чтобы знать точно , какие методы вызывать, нам нужно знать точные детали вашей ситуации.

0 голосов
/ 31 января 2014

Я нашел http://www.fileformat.info/info/unicode/char/10000/index.htm удобным сайтом для изучения символов Юникода.

Например, u + 10000 и u + 10FFFF

String first = "\uD800\uDC00"; // u10000
String last = "\uDBFF\uDFFF"; // u10FFFF
...