我指的是 the XML 1.1 spec 。
查看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的char
类型的 UTF16范围。所以它一定是 UTF32 ,对吗?所以,我需要针对此范围检查char
对,而不是单char
个,对吗?
我的问题是:
\u10000
和\uEFFFF
谢谢!
注意: 请不要担心,我不尝试编写自己的XML解析器。
编辑: 我正在编写一个解析器,它会检查来自其他(非XML)文本格式的文本输入是否与有效的XML名称匹配。
答案 0 :(得分:3)
查看Character.toCodePoint(char, char)
,它会将代理对转换为全范围代码点。 String.codePointAt
也可能对您有用。
在Character和String中有很多其他代理支持。要知道完全要调用哪些方法,我们需要知道您的具体情况。
答案 1 :(得分: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