gpt4 book ai didi

java - 使用 SAX 解析器解析包含 umlaute 的 XML 文件

转载 作者:搜寻专家 更新时间:2023-11-01 08:57:16 25 4
gpt4 key购买 nike

我看了很多关于同一个问题的帖子,但我无法弄清楚。我试图解析其中包含变音符号的 XML 文件。这就是我现在拥有的:

File file = new File(this.xmlConfig);
InputStream inputStream= new FileInputStream(file);
Reader reader = new InputStreamReader(inputStream,"UTF-8");

InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");

saxParser.parse(is, handlerConfig);

但它不会正确地变音。 Ä、Ü 和 Ö 将只是奇怪的字符。该文件肯定是 utf-8 格式,第一行这样声明:<?xml version="1.0" encoding="utf-8"?>

我做错了什么?

最佳答案

第一条规则:不要再猜测 XML 文档中使用的编码。始终使用字节流来解析 XML 文档:

InputStream inputStream= new FileInputStream(this.xmlConfig);
InputSource is = new InputSource(inputStream);
saxParser.parse(is, handlerConfig);

如果这不起作用,<?xml version=".." encoding="UTF-8" ?> XML 中的(或其他)错误,您必须从那里获取它。

第二条规则:确保使用支持目标或结果文档中使用的编码的工具检查结果。你有吗?

第三条规则:检查源文档中的字节值。打开您最喜欢的 HEX 编辑器/查看器并检查内容。例如,字母 Ä应该是字节序列0xC3 0x84 ,如果编码是 UTF-8。

第四条规则:如果它看起来不正确,请始终怀疑 UTf-8 源被视为或解释为 ISO-8859-1 源。通过将 UTF-8 源中的第一个和第二个字节与 ISO 8859-1 code charts 进行比较来验证这一点.

更新:

UNICODE 字母的字节序列 ä (带分音符的拉丁文小写字母 a,U+00E4)是 0xC3 0xA4在 UTF-8 编码中。如果您使用仅理解(或配置为将源解释为)ISO-8859-1 编码的查看工具,则第一个字节 0xC3是字母Ã , 第二个字节是字母 ¤ , 或货币符号 (Unicode U+00A4),可能看起来像一个圆圈。

因此,Android 中的“TextView”会将您的输入解释为 ISO-8859-1 流。我不知道是否可以更改它。但是,如果您的解析结果是字符串或字节数组,则可以将其转换为 ISO-8859-1 流(或字节数组),然后将其提供给“TextView”。

关于java - 使用 SAX 解析器解析包含 umlaute 的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165627/

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