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

MUY*_*ium 2 xslt encoding character-encoding libxml2

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

xsltproc iso8859_1.xslt iso8859.xml 
Run Code Online (Sandbox Code Playgroud)

并且重音符不正确(我的Linux中的$ LANG是en_US.ISO-8895-1).

如果我使用

xsltproc iso8859_1.xslt iso8859.xml \
| iconv --from-code=utf-8 --to-code=iso-8859-1
Run Code Online (Sandbox Code Playgroud)

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

在xsltproc命令之后如何在不调用新管道的情况下正确显示重音符号?

Ian*_*rts 5

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

<xsl:output method="xml" encoding="ISO-8859-1" />
Run Code Online (Sandbox Code Playgroud)

以这种方式配置编码而不是稍后修复它的最大好处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>
Run Code Online (Sandbox Code Playgroud)

运行任何XML文档都会产生

<?xml version="1.0" encoding="ISO-8859-1"?>
<example>&#1488;&#1489;&#1490;</example>
Run Code Online (Sandbox Code Playgroud)

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