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]

これを正しく解釈すると、最後の範囲 ( ) はJava の型のUTF16 範囲#x10000-#xEFFFFを超えています。だからそれはUTF32でなければなりませんよね?では、単一の sではなく、この範囲に対してのペアをチェックする必要がありますよね?charcharchar

私の質問は次のとおりです。

  • 標準の 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 に答える