Не понимаю регулярное выражение для правильной кодировки XML - PullRequest
1 голос
/ 18 апреля 2011

Как описывает w3c, допустимые символы для XML ограничены.

Мы можем распознать недопустимый символ, используя следующее регулярное выражение:

/*
 * From xml spec valid chars:
 * #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
 * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
 */
    Pattern pattern = Pattern.compile("[^\\x09\\x0A\\x0D\\x20-\\xD7EF\\xE000-\\xFFFD\\x10000-x10FFFF]");

Но я не знаю, почему выражение не так:

 Pattern pattern = Pattern.compile("[^\\x09\\x0A\\x0D\\x20-\\xD7EF\\xE000-\\xFFFD\\x10000-\\x10FFFF]");

Сообщение об ошибке:

java.util.regex.PatternSyntaxException: Illegal character range near index 49
[^\x09\x0A\x0D\x20-\xD7EF\xE000-\xFFFD\x10000-\x10FFFF]

1 Ответ

2 голосов
/ 18 апреля 2011

Простой ответ: Не каждый Точка кода Unicode может быть выражена как char в Java.Это связано с тем, что кодовая точка идентифицируется 21-битным числом, а ширина char составляет всего 16 бит.Поэтому кодовые точки, начинающиеся с U + 10000, кодируются с использованием двух char s: High Surrogate , за которым следует Low Surrogate .Строки и регулярные выражения работают на char s, а не на Code Points, поэтому вы должны сами их перевести.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...