【问题标题】:Unicode characters in XSLTXSLT 中的 Unicode 字符
【发布时间】:2018-10-09 06:56:39
【问题描述】:

我在以 unicode 编码显示字符时遇到问题。例如,在 XML 中,我有一个文本,我在 XSLT 的帮助下将其转换为 html。

文字是例如 此表单中的"Najlepší" 和字符“š”和“í”按应有的方式显示。但是我尝试使用此网站 http://itpro.cz/juniconv/ 将它们转换为 unicode(据说),因此文本现在看起来像 Najlep\u0161\u00ED,带有 \u0161\u00ED 形式的“š”和“í”字符。

我希望转换后的字符可以正常显示,我尝试了 UTF-8、UTF-16、ISO-8859-1,到目前为止没有运气。

我的 XML 和 XSLT 相当简单。在此处显示的 XML 中,我尝试了各种字符编码和组合

<?xml version="1.0" encoding="UTF-8"?>
<test>

<element1>
<name>ľ š č ť ž ý á í é &#9730; u"\U+010C" \u00C1 u"\U0001D504" \u0161 \u010D \u0165 \u0165 \u017E \u00FD \u00E1 \u00ED \u00E9</name>

</element1>


</test>

和 XSLT

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <head>
        <meta charset="UTF-8"/>
    </head>
    <body>
    <xsl:for-each select="test/element1">
        <xsl:value-of select="name"/>
    </xsl:for-each>
    </body>
</html>

输出看起来像这样

我做错了什么?例如 Eclipses 插件资源包编辑器能够正确显示这些字符。

编辑:我没有意识到这会引起混淆 - 我需要的是,当 HTML 通过转换生成并在 Web 浏览器中打开时,它应该将 \u00C1 显示为 Á

【问题讨论】:

  • 对我来说,它们似乎完全按照应有的方式显示。为什么要将它们转换成其他形式?
  • 问:当它看起来“乱七八糟”时,你究竟是如何“展示”的?听起来您在 XML 中所做的一切都是正确的……而在 XSLT 中一切都是正确的……而且翻译后的文本甚至在 Eclipse 中也能正确显示。它究竟在哪里没有正确“显示”?问:UTF-8 是 XML 的正确编码吗?
  • @paulsm4 哦,我忘了 - 当我在任何网络浏览器中打开转换生成的 HTML 时,它看起来就像我写的一样,但我想转换“\u00C1”部分将文本转换为“ľš č”等普通字符
  • @SamiKuhmonen 他们需要采用这种形式,因为我们正在使用其他一些软件,这些软件无法以显示的形式解码字符,我们发现,该软件可以使用那些 Unicode 字符来做到这一点,但我们还需要正确显示它们,我无法做到
  • OK:所以问题是您正在使用此站点“转换”字符:itpro.cz/juniconv。它将 Unicode 转换为 Java 实体(例如 "\u010C"),但您真正想要的是转换为 XML 实体(例如 &amp;#010C)。

标签: xml xslt unicode utf-8 character-encoding


【解决方案1】:

Java 和 Javascript 具有将 Unicode 字符表示为 \Uhhhh 的约定。

XML 有类似但不同的约定,它使用&amp;#xhhhh;

您在 XML 中使用 Java/Javascript 表示法,这是行不通的。

(请注意,对于高于 xFFFF 的字符,这两种表示法之间也存在细微差别:Java/Javascript 约定将字符分成代理对并分别表示每一半,而 XML 将 Unicode 代码点表示为单个字符参考。因此 XML 表示法是可变长度的,以分号作为终止符,而 Java/Javascript 表示法始终是 4 个十六进制数字。)

【讨论】:

    【解决方案2】:

    注意&amp;#9730; 是如何被正确对待的...... ;)

    事实上,\U+010C\u00C1 等各种符号是特定于编程语言的符号,它们“恰好”转换为相应的 Unicode 代码点。

    正如 W3C 在 Unicode in XML and other Markup Languages 1.1 中指定的那样,

    字符使用 Unicode 中使用的符号表示 标准,即可选的 U+ 后跟它们的十六进制 数字,至少使用 4 位数字,例如“U+1234”或“U+10FFFD”。 XML 或 HTML 这可以表示为 "&amp;#x1234;""&amp;#x10FFFD;"

    【讨论】:

    • 是的,我注意到了,虽然我现在不确定我们用来处理输出的其他软件是否能够处理编码为“ሴ”的字符而不是 "\U something something" 形式。但我一定会尝试的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多