Я обращаюсь к спецификации 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
s, правильно?
Мои вопросы:
\u10000
и \uEFFFF
Спасибо!
Примечание: Не волнуйтесь, я не пытаюсь записать собственный XML-синтаксический-анализатор.
Править: Я пишу синтаксический анализатор, который проверил бы, будет ли ввод текста от разных текстовых форматов (не XML) соответствовать допустимым именам XML.
Взгляните на Character.toCodePoint (char, char)
, который преобразует суррогатную пару в кодовую точку полного диапазона. String.codePointAt
тоже может быть вам полезен.
В символах и строках есть много других суррогатов. Чтобы точно знать , какие методы вызывать, нам нужно знать точные детали вашей ситуации.