Sos*_*osi 4 xml xslt httpwebrequest
我搞乱了编码.
一方面我有一个在UTF-8中响应我的网址(我非常肯定感谢firebug插件).
我使用以下代码打开以UTF-8读取内容的URL:
StreamReader reader = new StreamReader(response.GetResponseStream(),System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)
另一方面,我有一个转换xslt表与以下代码:
<?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>
Run Code Online (Sandbox Code Playgroud)
此xslt表也以UTF-8格式保存.
我使用以下代码将xml与xslt混合:
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;
Run Code Online (Sandbox Code Playgroud)
然后毕竟我在webbrowser中呈现此作者的内容,我得到以下错误:
无法显示XML页面无法使用样式表查看XML输入.请更正错误,然后单击"刷新"按钮,或稍后重试.
从当前编码切换到不支持的指定编码.处理资源' http:// localhost:2541/Results ....时出错
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="utf-16"?>
我想知道在哪里找到UTF-16编码需要计算:
任何帮助,将不胜感激.
提前致谢.
最好的祝福.
何塞.
由于该Encoding
属性返回UTF-16编码,因此您的编写器会将其写出来.StringWriter
您可以初始化XmlTextWriter
实例以使用UTF-8 MemoryStream
作为后备存储,而不是使用(内存中的UTF-16).
编辑:解决此问题的另一种方法是继承StringWriter
并覆盖该Encoding
属性以返回您喜欢的编码(例如,在您的情况下为UTF8).这个想法来自Robert McLaws撰写的博客文章.
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您并不是唯一遇到此问题的人...请参阅MSDN社区评论(在底部)或以下博文.