Gå til innhold

Anbefalte innlegg

Skrevet

Jeg har satt følgende i web.config:

 

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="nb-NO"/>

 

Men likevel når jeg bygger opp et XmlDocument, og returnerer dette fra en WebService, så står det

<?xml version="1.0" encoding="utf-8"?>

 

i responsen. Hvordan får jeg endret dette?

Videoannonse
Annonse
Skrevet

Du kan lage en XmlDeclaration og legge til:

XmlDocument xmlDoc = new XmlDocument();

XmlDeclaration xmldecl;
xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", null);
xmlDoc.AppendChild(xmldecl);

XmlElement items = xmlDoc.CreateElement("Items");
for(int index=0; index<5; index++) {
items.AppendChild(xmlDoc.CreateElement("Item"));
}
xmlDoc.AppendChild(items);

Skrevet

Det hjalp ikke stort.

 

xDoc = new XmlDataDocument();

XmlDeclaration xDec = xDoc.CreateXmlDeclaration("1.0", "iso-8859-1", "yes");
xDoc.AppendChild(xDec);

 

I starten her står det fortsatt

 

<?xml version="1.0" encoding="utf-8"?>

 

Standalone-parameteret er ikke der en gang.

Skrevet

Hva er galt med UTF-8? :) Men seriøst, jeg tror faktisk ikke det er mulig. Jeg mener å ha lest at dette er hardkodet inn i .NET som UTF-8 med vilje. Det er noen år siden jeg jobbet med .NET og Webservice, så det kan ha endret seg...

Skrevet

Tenkte det kunne være noe med XmlDataDocument som gjorde noe, men ikke hos meg. Denne koden:

class Program
   {
	   static void Main(string[] args)
	   {
		   XmlDocument xmlDoc = new XmlDataDocument();

		   XmlDeclaration xmldecl;
		   xmldecl = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
		   xmlDoc.AppendChild(xmldecl);

	// Legger til noen elementer for syns skyld.
		   XmlElement items = xmlDoc.CreateElement("Items");
		   for(int index=0; index<5; index++) {
			   items.AppendChild(xmlDoc.CreateElement("Item"));
		   }
		   xmlDoc.AppendChild(items);

		   Console.WriteLine(xmlDoc.OuterXml);
		   Console.ReadLine();
	   }
   }

Gir meg denne outputten (formatert for lesbarhet):

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
  <Items>
   <Item />
   <Item />
   <Item />
   <Item />
   <Item />
  </Items>

Rett encoding og standalone er med. Spørs om det ikke er noe du gjør senere som "retter" det til UTF-8 igjen?

 

Har du noe mer av koden din som går ann å se på?

Skrevet

Siden funksjonen skulle returnere et XmlElement, så funket det ikke når jeg brukte XmlDocument. Måtte bruke XmlDataDocument.

 

Skal se mer på det i morra på jobb.

Skrevet

Jeg har en klasse, kalt ResponseBuilder:

 

Klikk for å se/fjerne innholdet nedenfor

public class ResponseBuilder
{
private XmlDataDocument xDoc;
XmlNode rootNode;

public ResponseBuilder()
{
	xDoc = new XmlDataDocument();

	XmlDeclaration xDec = xDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
	xDoc.AppendChild(xDec);

	rootNode = xDoc.CreateNode(XmlNodeType.Element, "result", null);
	xDoc.AppendChild(rootNode);
}

public void AddNode(string name, string value)
{
	XmlElement elem = xDoc.CreateElement(name.ToLower());
	elem.InnerText = value;
	rootNode.AppendChild(elem);
}

public void AddNodeWithChildren(string name, Dictionary<string, string> children)
{
	XmlElement elem = xDoc.CreateElement(name.ToLower());

	foreach(string names in children.Keys)
	{
		XmlElement elm = xDoc.CreateElement(names.ToLower());
		elm.InnerText = children[names];
		elem.AppendChild(elm);
	}

	rootNode.AppendChild(elem);
}

public XmlDataDocument ResultDocument
{
	get
	{
		return xDoc;
	}
}
}

 

Denne bruker jeg da fra en WebService:

 

[WebMethod]
public XmlDataDocument Test()
{
 ResponseBuilder rb = new ResponseBuilder();
 rb.AddNode("Jalla", "tekst");
 return rb.ResultDucument;
}

 

Det jeg da ser i nettleseren når jeg invoker den er:

 

<?xml version="1.0" encoding="utf-8"?>
<jalla>
 tekst
</jalla

Skrevet

Det er jo litt spesielt at den skal si "utf-8" når jeg har denne:

 

<globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="nb-NO"/>

 

Men faktisk i den automatiske "dokumentasjonsfilen", så står "utf-8" hardkodet inn på eksemplene.

  • 4 uker senere...
Skrevet

Hva er så farlig med om XMl kommer i UTF-8? Du kan jo bare gjøre slik:

 

				XmlElement utf8xml = webservice.method();
			string iso8859 = Encoding.GetEncoding("iso8859-1").GetString(Encoding.UTF8.GetBytes(utf8xml));

Skrevet (endret)

Hvis jeg forsto deg korrekt så er det encodingen til en WebService, altså selve SOAP-responsen på en asmx du vil endre?

 

Edit: på tjenesten, ikke på klienten selvsagt...

Endret av steingrim
Skrevet

Nettopp!

 

Så muggsopp er ganske langt ut på feil jorde. Dessuten ER det 3.5. Det som også er litt morsomt er at det er ikke mulig å se det ut ifra syntaxen som er brukt. Det kunne like godt vært 1.1 med samme syntax ^^ Noen som liker å late som om de kan noe :D

Skrevet

Du kunne brukt duck typing

var xDec = xDoc.CreateXmlDeclaration("1.0", "iso-8859-1", "yes");
xDoc.AppendChild(xDec)

 

Men muggsopp er jo ikke noe bedre selv, dessuten er ikke dette .NET 3.5 men en C# 3.0 feature som funker fint på en .NET 2.0 JIT allikevel.

pwnd.

 

.NET 3.5 er Windows Workflow Foundation, Windows Presentation Foundation, Windows Card Space og LINQ utelukkende.

.NET 3.5 er .NET 2.0 + 1.5 siden det ikke er noen grunnleggende endringer i .NET 3.5 fra 2.0.

 

Manfred har også allerede sagt at det er kritisk at klienten tar imot ISO 8895 og ikke UTF-8, som jeg går utifra har noe med SMS eller noe slikt å gjøre.

Skrevet

Poenget er jo at alt foregår i iso-8859-1 på serveren. Jeg kan ikke tro at .net gjør om dette til UTF8 før det spytter ut igjen? Så det jeg lurer på er jo om dette i praksis vil si at xml-ene mine er i iso-8859-1, men at det likevel står UTF-8 i headeren?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...