如何从xsltproc输出iso-8859-1 charset?

时间:2014-02-10 16:49:25

标签: xslt encoding character-encoding libxml2

我已经使用xsltproc将一些xml转换为另一个xml。

xsltproc iso8859_1.xslt iso8859.xml 

重音符号显示不正确(我的Linux中的$ LANG是en_US.ISO-8895-1)。

如果我使用

xsltproc iso8859_1.xslt iso8859.xml \
| iconv --from-code=utf-8 --to-code=iso-8859-1

重音出现正确。 (也在我生成的HTML文档中)

如何在xsltproc命令之后不调用新管道时正确显示重音?

1 个答案:

答案 0 :(得分:5)

如果要以特定编码编写输出XML,则需要在xsl:output指令上指定

<xsl:output method="xml" encoding="ISO-8859-1" />

以这种方式配置编码而不是稍后使用iconv修复编码的一大好处是,这意味着XML序列化程序知道目标编码将是什么,以及样式表是否尝试输出任何字符在选定的字符编码中无法表示,那么它们将作为字符引用保留,而不是在iconv时间消失,例如

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" encoding="ISO-8859-1" />

  <xsl:template match="/">
    <example>אבג</example>
  </xsl:template>
</xsl:stylesheet>

运行任何XML文档都会产生

<?xml version="1.0" encoding="ISO-8859-1"?>
<example>&#1488;&#1489;&#1490;</example>

分别代表א,ב和ג的三个字符引用(记住希伯来语从右到左读取)。