gpt4 book ai didi

java - 如何检查 XML 数据是否为有效的 UTF-8 并检测不正确的字符?

转载 作者:行者123 更新时间:2023-11-29 06:24:27 24 4
gpt4 key购买 nike

在我的应用程序中,我必须验证 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 中的库已经存在可以做到这一点?

如果有人能帮助我,我将不胜感激。提前致谢。

问候。

最佳答案

一些事情:

  • CDATA 不会保护您免受无效字符的侵害;您的垃圾数据仍然是非法的 UTF-8 序列,可能会被 XML 解析器拒绝
  • 使用configured CharsetDecoderInputStreamReader验证字符序列;或者,按照 RFC 2279 (see the UTF-8 definition) 中的描述检查字节序列是否有效。
  • 如果没有 XML 解析器,我不会尝试解析 XML
  • Character.isDefined 需要一个 UTF-16BE 编码的 char (or a UTF-32BE encoded int),而不是 UTF-8 编码的字节
  • 在 Java 6 中,Character.isDefined 仅限于 Unicode Standard, version 4.0. 中定义的代码点;可能有以后的标准定义的有效 UTF-8 文档,这将失败(版本 6 现已推出);最新的有效代码点列表在 UnicodeData.txt 中定义

关于java - 如何检查 XML 数据是否为有效的 UTF-8 并检测不正确的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com