我已经使用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命令之后不调用新管道时正确显示重音?
答案 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>אבג</example>
分别代表א,ב和ג的三个字符引用(记住希伯来语从右到左读取)。