Manfred Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 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? Lenke til kommentar
Glenn F. Henriksen Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 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); Lenke til kommentar
Manfred Skrevet 15. oktober 2008 Forfatter Del Skrevet 15. oktober 2008 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. Lenke til kommentar
steingrim Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 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... Lenke til kommentar
Manfred Skrevet 15. oktober 2008 Forfatter Del Skrevet 15. oktober 2008 Det er ikke noe galt med UTF-8, men det er iso-8859-1 som returneres, så det blir litt idiotisk om det skal stå utf-8 der Lenke til kommentar
steingrim Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 Det blir jo litt dumt ja... Jeg sleit med det samme en gang, men hele prosjektet gikk over til utf-8 så det løste seg Lenke til kommentar
Manfred Skrevet 15. oktober 2008 Forfatter Del Skrevet 15. oktober 2008 Haha. Det blir litt teit om vi skal kjøre utf-8 når det er iso-8859-1 som er "standarden" i bransjen Lenke til kommentar
Glenn F. Henriksen Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 Noen spesiell grunn til at du bruker XmlDataDocument isteden for XmlDocument? Lenke til kommentar
Glenn F. Henriksen Skrevet 15. oktober 2008 Del Skrevet 15. oktober 2008 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å? Lenke til kommentar
Manfred Skrevet 15. oktober 2008 Forfatter Del Skrevet 15. oktober 2008 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. Lenke til kommentar
Manfred Skrevet 17. oktober 2008 Forfatter Del Skrevet 17. oktober 2008 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 Lenke til kommentar
Glenn F. Henriksen Skrevet 17. oktober 2008 Del Skrevet 17. oktober 2008 Hum, det virker som om en WebMethod som returnerer ett XmlDocument tar ut nodene og pakker det inn i sin egen xml versjon. Virkelig rart... Har ikke noe godt svar på denne, må se litt nærmere på den... Lenke til kommentar
Manfred Skrevet 17. oktober 2008 Forfatter Del Skrevet 17. oktober 2008 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. Lenke til kommentar
muggsopp Skrevet 13. november 2008 Del Skrevet 13. november 2008 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)); Lenke til kommentar
Manfred Skrevet 13. november 2008 Forfatter Del Skrevet 13. november 2008 nei, det er 3.5 og du fatter ikke hva jeg spør etter en gang! Lenke til kommentar
steingrim Skrevet 14. november 2008 Del Skrevet 14. november 2008 (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 14. november 2008 av steingrim Lenke til kommentar
Manfred Skrevet 14. november 2008 Forfatter Del Skrevet 14. november 2008 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 Lenke til kommentar
GeirGrusom Skrevet 14. november 2008 Del Skrevet 14. november 2008 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. Lenke til kommentar
Manfred Skrevet 14. november 2008 Forfatter Del Skrevet 14. november 2008 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? Lenke til kommentar
GeirGrusom Skrevet 14. november 2008 Del Skrevet 14. november 2008 Hva med å send noe som er ulovlig i UTF-8? da skal tegnene bli byttet ut med ? eller � dersom det er UTF-8 som blir brukt. for eksempel {0xF0,0x20,0x20,0x20} Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå