В моем приложении мне нужно проверить данные XML и забрать все недопустимые символы (поместить их в CDATA)
Мой вопрос довольно прост ... ^^ как это сделать?
Я начал с методов Character.UnicodeBlock, но как это работает с символами, инкорпорированными в несколько байтов - например, «ï» или «é»?
Это мой код на данный момент (для тестирования):
public static void main(String[] args) {
try {
byte[] data = "J'ai prïé et `".getBytes("UTF-8");
System.out.print("Data: ");
for (int i = 0; i < data.length; i++) {
System.out.print((char) data[i]);
}
System.out.println("");
UnicodeBlock myBlock = null;
for (int i = 0; i < data.length; i++) {
System.out.println("[" + i + " => '" + (char) data[i]
+ "'] Is defined: "
+ Character.isDefined(new Byte(data[i]).intValue()));
try {
myBlock = Character.UnicodeBlock.of(new Byte(data[i])
.intValue());
} catch (IllegalArgumentException e) {
System.out
.println("Count => "
+ Character.charCount(new Byte(data[i])
.intValue()));
}
}
} catch (UnsupportedEncodingException e) {
System.err.println("Unsupported encoding: " + e.getMessage());
}
System.out.println("Finished");
}
И вот что я получаю при исполнении:
Data: J'ai pr???? et `
[0 => 'J'] Is defined: true
[1 => '''] Is defined: true
[2 => 'a'] Is defined: true
[3 => 'i'] Is defined: true
[4 => ' '] Is defined: true
[5 => 'p'] Is defined: true
[6 => 'r'] Is defined: true
[7 => '?'] Is defined: false
Count => 1
[8 => '?'] Is defined: false
Count => 1
[9 => '?'] Is defined: false
Count => 1
[10 => '?'] Is defined: false
Count => 1
[11 => ' '] Is defined: true
[12 => 'e'] Is defined: true
[13 => 't'] Is defined: true
[14 => ' '] Is defined: true
[15 => '`'] Is defined: true
Finished
Я пытаюсь найти способ также обнаруживать несколько байтовых символов и иметь только «ложный» результат для реальногоневерные символы.
Может быть, библиотека на Java уже существует для этого?
Буду очень любезен, если кто-нибудь сможет мне помочь.Заранее спасибо.
С уважением.