我有一个基于Java / XML / XSL的Web应用程序,它从另一个服务获取XML文档,然后我们显示主文本模式。
两个站点都显示相同的文本块(可以包括HTML格式,英语/法语)。主站点显示正常,但我的网站显示不正确的某些字符。包括法语字符在内的所有内容都会正确显示,除了少数几个。
检查文件我看到A0,B7没有正确显示。
正在搜索此网站,我发现了这个问题/回复:
Is ED A0 80 ED B0 80 a valid UTF-8 byte sequence?
在接受的答案中,非法UTF-8被解释为Windows-1252。他展示的那些角色就是我所看到的。
据我所知,该文档来到我的网站UTF-8(如果重要的话,来自基于.NET的网络应用程序),我们将其存储,并显示回来。它存储为XML文档并转换为显示输出。
该块显示为disable-output-escaping(以便显示HTML格式)并且看起来工作正常。
理想情况下,我可以按照预期显示这些字符(A0是空格),这样我的输出看起来与父网站相同。
感谢任何帮助或建议。
答案 0 :(得分:1)
XSLT处理器(使用一个编码A输出结果)和显示软件之间基本上存在误解,显示软件使文档认为其编码为B.您没有提供足够的信息来确定A和B是什么;你还没有具体说明“显示软件”,我怀疑它是网络服务器和浏览器的结合。检查内容(XML声明或HTML字符集声明)中指定的编码,HTTP标头中指定的编码以及字节的实际编码是否彼此一致。
答案 1 :(得分:0)
您提供的字符字节(ED A0 80
和ED B0 80
)是所谓代理项的unicode字符,它们总是成对出现。
见Wikipedia unicode surrogates。对于unicode代理字符子集,请参阅Unicode overview
下一步是弄清楚他们是如何到达那里的: - )