【问题标题】:Saxon input encoding not recognized?无法识别撒克逊输入编码?
【发布时间】:2020-09-18 07:45:48
【问题描述】:

我在 Saxon xslt 处理器的 utf-8 文本输出中得到了奇怪的字符。

输入 xml 的标题是

<?xml version="1.0" encoding="windows-1252"?>

它包含类似的字符串(在 notepad++ 中显示,Windows-1252 编码显示在右下方)

“abc”

转换样式表包含

<xsl:output method="text" encoding="utf-8" />

但输出包含(在 notepad++ 中显示,右下方显示 UTF-8 编码)

�abc�

而不是 UTF-8 编码

“abc”

知道我错过了什么吗?

p.s.:当我使用 notepad++ 将 xml 输入从 windows-1252 更改为 UTF-8 时,输出被正确编码,这就是我的解决方法。不过,我想了解我是否遗漏了什么,或者某些软件应该在字符集方面进行改进。

【问题讨论】:

  • 那么你如何准确地使用 Saxon,你是否使用它的命令行工具,例如-o:result.txt 创建文本文件?还是您编写 Java 或 C# 代码?您可能需要提供这方面的详细信息,以便任何人都知道哪里出了问题。

标签: xml xslt utf-8 saxon windows-1252


【解决方案1】:

我怀疑虽然输入标记为 windows-1252,但它实际上不是 Windows-1252。

首先,尝试找出问题是在输入上还是在序列化上。您可以通过在 XSLT 代码中使用 string-to-codepoints() 来查看解析的节点树中存在哪些实际代码点。

如果是输入问题,那是 XML 解析器的责任,而不是 Saxon 本身的责任,所以这取决于您使用的是哪个 XML 解析器。

【讨论】:

  • 谢谢你,迈克尔,这有帮助。我通过 API 从 Java 调用 Saxon。读取输入文件似乎是我的问题。
  • 你是如何提供输入的?也许您通过提供 Reader 而不是 InputStream 自己进行解码(而不是让 XML 解析器来做)?
  • 我会尽快遵循这个想法。使用 Java-API 的原因不仅是 CharSet 问题,而且即使没有输入也能够启动 Saxon,或者使用纯文本输入,例如.csv,或包含要传递到输出的 gt lt 等字符的文本,或具有在应用 xslt 转换之前必须转换为 xml 的标记的文本输入。因此,我的 InputStream 检查算法有着悠久的历史。在某些情况下,它可能已经过时,但它可以工作(大部分时间)。
猜你喜欢
  • 2016-01-25
  • 2012-01-14
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多