首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >乱码和XslCompiledTransform

乱码和XslCompiledTransform
EN

Stack Overflow用户
提问于 2010-05-18 14:11:54
回答 2查看 4.5K关注 0票数 4

我在捣乱编码。

一方面,我有一个在UTF-8中响应我的url (我非常肯定,多亏了firebug插件)。

我使用以下代码打开url,读取UTF-8中的内容:

代码语言:javascript
复制
StreamReader reader = new StreamReader(response.GetResponseStream(),System.Text.Encoding.UTF8);

另一方面,我有一个带有以下代码的转换xslt表:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
            <br/>
            hello
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

此xslt表也以UTF-8格式保存。

我使用以下代码将xml与xslt混合:

代码语言:javascript
复制
StringWriter writer = new StringWriter();
XslCompiledTransform transformer = new XslCompiledTransform();

transformer.Load(HttpContext.Current.Server.MapPath("xslt\\xsltsheet.xslt");  
XmlWriterSettings xmlsettings = new XmlWriterSettings();
xmlsettings.Encoding = System.Text.Encoding.UTF8;
transformer.Transform(xmlreader, null, writer);   

return writer;

最后,im在and浏览器中呈现作者的内容,并得到以下错误:

无法显示XML页,无法使用样式表查看XML输入。请更正错误,然后单击“刷新”按钮,或稍后再试。 从当前编码切换到不支持的指定编码。错误处理资源‘http://localhost:2541/Results

我想知道在哪里可以找到UTF-16编码,计算如下:

  • 我所有的文件都被保存为UTF-8。
  • 来自服务器的响应在UTF-8中。
  • xslt表的读取方式配置为UTF-8。

任何帮助都将不胜感激。

提前谢谢。

诚挚的问候。

何塞。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-18 14:20:37

因为Encoding属性返回UTF-16编码,所以编写器会将其写入。而不是使用StringWriter (内存中的UTF-16 ),您可以初始化一个XmlTextWriter实例来使用UTF-8和MemoryStream作为后备存储。

编辑:另一种解决问题的方法是从StringWriter继承并覆盖Encoding属性以返回您喜欢的编码(例如,在您的情况下是UTF8 )。这个想法来自于一个罗伯特·McLaws撰写的博客文章

代码语言:javascript
复制
public class UTF8StringWriter: StringWriter {
    public UTF8StringWriter() {}
    public UTF8StringWriter(IFormatProvider formatProvider): base(formatProvider) {}
    public UTF8StringWriter(StringBuilder sb): base(sb) {}
    public UTF8StringWriter(StringBuilder sb, IFormatProvider formatProvider): base(sb, formatProvider) {}

    public override Encoding Encoding {
        get {
            return Encoding.UTF8;
        }
    }
}

你不是一个人有这个问题..。例如,请参见MSDN社区评论 (在底部)或下面的博客帖子

票数 12
EN

Stack Overflow用户

发布于 2010-05-18 14:20:54

试着使用:

代码语言:javascript
复制
StringBuilder stringBuilder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(stringBuilder, transformer.OutputSettings))
{
    xsl.Transform(xmlreader, writer);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2858024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档