7

我指的是 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) 超出了Java类型的UTF16 范围。char所以它必须是UTF32,对吧?所以,我需要char根据这个范围检查对,而不是单个chars,对吧?

我的问题是:

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

谢谢!

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

4

2 回答 2

4

看看Character.toCodePoint(char, char)哪个会将代理对转换为全范围代码点。String.codePointAt也可能对您有用。

Character 和 String 中还有很多其他代理支持。要确切知道要调用哪些方法,我们需要知道您的具体情况。

于 2010-05-20T10:16:50.090 回答
0

我发现http://www.fileformat.info/info/unicode/char/10000/index.htm是学习 Unicode 字符的便捷站点。

例如,u+10000 和 u+10FFFF 是

String first = "\uD800\uDC00"; // u10000
String last = "\uDBFF\uDFFF"; // u10FFFF
于 2014-01-31T18:47:06.890 回答