Java,JavaCC:如何解析BMP之外的字符?

jav*_*top 5 java unicode javacc utf-16

我指的是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]

如果我正确地解释了这一点,那么最后一个range(#x10000-#xEFFFF)超出了Java 类型的UTF16范围char.所以一定是UTF32,对吧?所以,我需要检查对char这个范围的对,而不是单个chars,对吧?

我的问题是:

  • 如何使用标准Java方法检查此类字符范围?
  • 如何在JavaCC中定义这样的范围?
    • JavaCC抱怨\u10000\uEFFFF

谢谢!

注意: 别担心,我不是在尝试编写自己的XML解析器.
编辑: 我正在编写一个解析器,它将检查来自其他(非XML)文本格式的文本输入是否与有效的XML名称匹配.

Jon*_*eet 4

看一下Character.toCodePoint(char, char)它将代理对转换为全范围代码点。String.codePointAt可能对你也很有用。

字符和字符串中还有许多其他代理支持。要确切地知道要调用哪些方法,我们需要了解您的具体情况。