2016-10-27 3 views
1

내가 브라우저에서 XML 파일을 열하려고에서 XML을 열 때 지원 나는 다음과 같은 오류 얻을 : 지원되지 않음 지정된 인코딩 현재 인코딩에서스위치가없는 브라우저

스위치. 오류 처리 리소스

이제이 코드를 C#을 사용하여 아래 코드로 생성합니다. 내 XML에는 라틴 문자가 있으므로 ISO-8859-1 및 utf-16이 아닌 인코딩을 사용하고 싶습니다. 하지만 내 xml을 생성 할 때마다 ISO-8859-1이 아닌 utf-16으로 인코딩됩니다. 나는 원인과 해결책이 무엇인지 알고 싶습니다.

참고 : 인코딩이 ISO-8859-1 인 경우 XML이 올바르게 생성되므로 ISO-8859-1 만 필요하고 utf-8 또는 utf-16은 필요하지 않습니다.

C# 코드 :

var doc = new XDocument(new XDeclaration("1.0", "iso-8859-1", "yes"),new XElement("webapp", new XAttribute("name", webApp.Name), new XAttribute("id", webApp.Id), Myinformation()); 
    var wr= new StringWriter(); 
      doc.Save(wr); 
      return wr.ToString(); 
+0

[1 시간 전에 질문 한 질문] (http://stackoverflow.com/questions/40278579/missing-xml-declaration-using-c-sharp-code)에 제공된 의견과 링크를 참조하십시오. 'XmlWriter'를 사용해야합니다. 'ToString' 또는'StringWriter'를 사용하면 항상 UTF-16을 사용하는'XmlWriter'가됩니다. –

+0

ok.. 그걸 시도해보십시오. 죄송합니다. 문제가 시간이 다르기 때문에 놓쳤습니다. –

+0

XML은 라틴 문자를 지원하지 않습니다. XmlWriter를 사용하는 Ankit 제안은 라틴 문자를 유니 코드 값으로 자동 변환합니다. 웹 페이지보기 : https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references – jdweng

답변

0

문자열, 개념적으로 적어도, 인코딩이 없습니다. 그것은 단지 유니 코드 문자의 연속입니다. 즉, 메모리에있는 문자열은 본질적으로 UTF-16이므로 StringWriter은 그 문자를 Encoding 속성에서 반환합니다.

는 당신이 필요로하는 인코딩을 지정하는 작가이다 당신 희망 :

var doc = new XDocument(new XElement("root")); 

byte[] bytes; 

var isoEncoding = Encoding.GetEncoding("ISO-8859-1"); 

var settings = new XmlWriterSettings 
{ 
    Indent = true, 
    Encoding = isoEncoding 
}; 

using (var ms = new MemoryStream()) 
{ 
    using (var writer = XmlWriter.Create(ms, settings)) 
    { 
     doc.Save(writer); 
    } 
    bytes = ms.ToArray(); 
} 

이 당신에게 ISO-8859-1을 사용하여 인코딩 된 바이너리 데이터를 제공하며, 결과적으로 선언이 지정됩니다 부호화.

당신은 문자열이 다시 변환 할 수 있습니다

var text = isoEncoding.GetString(bytes); 

을하지만 이것은 더 이상 ISO-8859-1로 인코딩되어 있습니다하지, 다시 단지 문자열입니다. 당신은 다른 것을 사용하여 그것을 매우 쉽게 인코딩 할 수 있으며 당신의 선언은 정확하지 않을 것입니다.

중간 문자열로 사용하려는 경우 the approach in this answer을 사용하는 것이 좋습니다.