2017-12-02 22 views
0

이 방법은 XML 파일을 작성합니다 (특정 작업). 필자는 UTF-8 (BOM 없음) 인코딩을 사용하여 파일을 작성하도록 설정 한 것을 제외하고는 필자가 원하는 모든 것을 정확히 작성했습니다.XmlWriter가 내가 설정 한 인코딩을 따르지 않는 이유는 무엇입니까?

XML 선언에 UTF-8이 나와 있지만 Notepad ++에서 파일을 열면 ANSI로 인코딩 된 것으로 표시됩니다.

 XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 
     settings.Encoding = new UTF8Encoding(false); 
     settings.NewLineOnAttributes = true; 


     using (var xmlWriter = XmlWriter.Create(@"c:\temp\myUIPB.xml", settings)) 
     { 
      xmlWriter.WriteStartDocument(); 
      xmlWriter.WriteStartElement("UIScript"); 

      // Write Event Nodes 
      foreach (var eventNode in listBoxOutput.Items) 
      { 
       lbEvent myNode = (lbEvent)eventNode; 
       XmlNode xn = myNode.workflowEvent; 
       xn.WriteTo(xmlWriter); 
      } 

      xmlWriter.WriteFullEndElement(); 
      xmlWriter.WriteEndDocument(); 
      xmlWriter.Flush(); 
      xmlWriter.Close(); 
     } 
내가 기대

내가 써 파일이 실제로 인코딩 UTF-8 대신 ANSI로 인코딩되어, UTF-8로 출력을 설정하면 그.

생각하십니까? 도움?

+0

[C#에서 StringWriter를 사용하는 [XmlWriter 인코딩 UTF-8]의 가능한 복제본 (https://stackoverflow.com/questions/42583299/xmlwriter-encoding-utf-8-using-stringwriter-in-c-sharp) – MethodMan

+2

You ['new UTF8Encoding (false)'] (https://msdn.microsoft.com/en-us/library/)을 사용하여 [BOM] (https://en.wikipedia.org/wiki/Byte_order_mark)을 생략하기로 결정했습니다. s064f8w2 (v = vs.110) .aspx). 어쩌면 XML 파일은 실제로 utf8로 인코딩되지만 메모장 ++는 누락 된 BOM으로 인해 잘못 추측하고 있습니까? 보충 유니 코드 비행기에서 한자 문자를 내보내려고하면 어떻게됩니까? 제대로 인코딩 되었습니까? 아니면 이스케이프 되었습니까? – dbc

+0

실제로 관련이있는 github에서 [this] (https://github.com/adobe/brackets/issues/10583#issuecomment-168409391)를 발견했습니다. * 메모장 ++는 콘텐츠 인코딩을 알 수 없기 때문에 추측해야합니다. . ASCII 만 표시하므로 가장 낮은 공통 분모를 사용합니다 (기본적으로 Windows에서는 ASCII + 외국어 확장 (예 : Windows-1252)). * – dbc

답변

2

BOM 및 ASCII 인코딩이없는 Utf8을 사용하는 파일에 라틴 문자와 숫자 만 포함 된 파일이 동일한 것처럼 보입니다.

메모장과 같은 notepad ++와 같은 일반 텍스트 편집 프로그램은 사용자가 원하는대로 인코딩을 추측 할 수 있습니다 (일반적으로 "인코딩으로 열기"파일 열기 옵션과 함께 몇 가지 힌트를 제공하지 않는 한).

준수 XML 파서는 "xml"PI (<?xml version="1.0" encoding="UTF-8"?>)의 "인코딩"부분을 사용하여 BOM이없는 파일의 올바른 인코딩을 감지합니다. 귀하의 경우 올바른 "xml"PI를 얻고 준수하는 XML 파서가 올바르게 열립니다.

Utf8을 감지하는 모든 프로그램이 인코딩 생성자에 true을 전달하여 BOM을 올바르게 지정해야하는 경우.

코드가 128 이상인 BOM 파일이 없어도 인코딩이 잘못 감지 될 수 있습니다.

+2

XML에 선언 된 인코딩을 결정하는 규칙이 있습니다. 그러나 일반 텍스트 편집기는 XML에 대해 알지 못합니다. 메모장 ++ 플러그인에는 많은 XML 기능이 있지만 Notepad ++ 자체가 선언 된 인코딩을 사용하는 데 도움이되지 않는 것으로 보입니다. –

+0

감사합니다. UTF-8 (BOM이없는 경우)을 올바르게 읽지 못할 파일을 읽는 시스템을 알고 있습니다. 그것은 128 이상의 코드를 가진 문자를 사용해서는 안됩니다. 이것은 매우 간단합니다. – kingtermite

+0

또한 ... '힌트'를주는 것과 관련하여. BOM없이 인코딩을 UTF-8로 설정하는 것이 었습니다. 내가 힌트를 줄 수있는 다른 방법이 있습니까? – kingtermite