【问题标题】:cross-encoding XSL transformations交叉编码 XSL 转换
【发布时间】:2011-06-27 16:23:29
【问题描述】:

我要对 XML 文件进行一些操作(无关紧要),而 XSL 在这种情况下非常适用。 但是,我的输入文件以 UTF-8 编码,转换后的文件必须以 iso-8859-1 编码。 (我也不控制输入文件的编码)

除了 utf-8 而不是 iso-8859 中的一些特殊字符在输出文件中被转义之外,一切都很顺利。

例如我有 <text>some text with a € character</text> 转化为 <text>some text with a € character</text>

输出文件中的“€”对我来说是个问题。

由于我们必须对那些不在 ISO 中的特殊字符进行处理,我首先想到的是使用替换函数手动转换它们:replace(., '€', 'euros') 但是 utf-8 中有很多字符不在 iso 中,所以它很快就很无聊......而且很慢!

你有更好的解决方案吗? (假设我们可以删除这些字符或将它们转换为任何可行的 iso 字符)

提前致谢

【问题讨论】:

  • 你能更详细地解释问题是什么吗?为什么像€ 这样的转义字符会出现问题?

标签: xslt encoding character-encoding


【解决方案1】:

你有

<xsl:output encoding="iso-8859-1" />

到位了吗?

因为这应该就是你所需要的,真的。如果您的 XSL 处理器无法自行将字符正确转换为目标编码,则它已损坏,您需要使用其他处理器。

提示

  • 通常Windows-1252 是人们真正 说ISO-8859-1 时的意思。仔细检查这是否也适用于您。两者之间存在细微差别(尤其是欧元符号,它在ISO-8859-1 中不存在,但在Windows-1252 和ISO-8859-15 中存在)。
  • 每当 XML 文件中缺少 XML 声明 &lt;?xml version="1.0" encoding="iso-8859-1"?&gt; 时,都假定采用 UTF-8 编码。无论何时不是 UTF-8 编码,请务必在文件顶部声明。

【讨论】:

  • 听起来他已经获得了正确的 ISO-8859-1 输出。他只是不喜欢 ISO 8859-1 中没有的字符被转义的方式。
  • @Lars:我希望 UTF-8 字符 € (0x20ac) 被转换为 ISO-8859-15(8859-1 甚至没有欧元符号)字符 € 在0xa4,而不是 &amp;#8364;,这在 8 位编码中甚至没有意义。
  • @Lars:再说一次,&amp;#8364; 似乎可以工作。没想到,现在想想。所以,是的,你可能是对的。 (而且我怀疑 OP 并不真正想要 iso-8859-1 可能也是正确的,因为在 Windows-1252 中,当我测试它时,该字符会作为常规的 € 符号出现。)
  • 大家好,对于迟到的回归感到抱歉...@Martin Honnen:转义字符对我来说是一个 pb,因为我想在转换后使用的应用程序不接受它(它只是崩溃。 ..) 而且由于我没有处理这个应用程序,我需要在转换中解决这个问题。 @Tom 就是这样! @Lars你是正确的ISO_8859-1没有€符号,但这是我必须使用的编码。只是让你知道,也许它可以帮助那里的人,这是我(快速)修复它的方法。
  • 只是让你知道,也许它可以帮助那里的人,这是我(快速)修复它的方法。 &lt;xsl:value-of select="translate($input_text,'€‘’‚“”–—ŒœŠšŸƒ„†‡•…‰™','E``,&amp;quot;&amp;quot;--?????????????')" /&gt; 我将每个在 iso 中没有等效项的 utf-8 翻译成 iso 中存在的另一个字符。这不是我所说的好解决方案,但它对我有用。
猜你喜欢
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2015-05-29
  • 2011-11-24
相关资源
最近更新 更多