Re: [xsl] IE error | Switch from current encoding to specified encoding not supported.
Subject: Re: [xsl] IE error | Switch from current encoding to specified encoding not supported.|
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Wed, 03 Oct 2007 19:34:18 +0200
Hi Steve, William,
This is one way to do it. The source of the original problem was
actually with the settings for the internal XML Writer, which defaults
to UTF-16 (partially true, real UTF-16 is not supported by Microsoft,
notably, MS does not support surrogate pairs) and if you "just" write
the results of an XsltProcessor, it ends up being UTF-16.
By setting a custom writer with your properties, for the encoding you
will effectively create the correct output stream in one go, without
having to use Response.Write.Replace. I.e., in C# it looks a bit like this:
// instantiate an XmlWriter
XmlWriter xmlWriter = XmlWriter.Create("output.xml");
xmlWriter.Settings.Encoding = "UTF-8";
XslCompiledTransform xslt = new XslCompiledTransform(true);
// enable document function and scripting
XsltSettings xsltSettings = new XsltSettings(true, true);
// load stylesheet and transform to "output.xml" (but you can use
xslt.Load("Xslt/test.xslt", xsltSettings, null);
xmlWriter = XmlWriter.Create("output.xml");
xslt.Transform("Xslt/test.xslt", xsltArgs, xmlWriter);
This is using the classes from ASP.NET 2.0 so you if you want to use
this you may have to adjust it to your situation.
-- Abel Braaksma
W Charlton wrote:
If you are using ASP then you will need to add a replace function.
Below is a snip of some code we use.
Set XSLTemp = Server.CreateObject(MSXML2.XSLTemplate.3.0)
Set XSLTemp.stylesheet = XSLDoc 'variable set higher up in page e.g.
Set XSLProc = XSLTemp.createProcessor
XSLProc.input = XMLDoc 'variable set higher up in page e.g.
XSLProc.addParameter "MyParam", "MyParamValue"
Response.Charset = "ISO-8859-15"
Response.Write Replace(XSLProc.output, "UTF-16", "ISO-8859-15")
If you want UTF-8 replace ISO-8859-15 (Latin 1 extended) with UTF-8
The yMonda team