문제

다음과 같은 코드 덩어리 (Brevity를 위해 snipped)는 XML 문서를 생성하고 파일에 뱉어냅니다. Visual Studio에서 파일을 열면 한자가있는 것으로 보입니다. 메모장으로 열면 예상대로 보입니다. Console.writeline이라면 올바르게 보입니다.

나는 그것이 인코딩과 관련이 있다는 것을 알고 있지만, 나는 모든 인코딩 오리를 연속으로 가지고 있었지만. 무엇이 빠졌습니까?

StringBuilder stringBuilder = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Unicode;
settings.Indent = true; 
settings.IndentChars = "\t";
using (XmlWriter textWriter = XmlWriter.Create(new StringWriter(stringBuilder), settings))
{
    textWriter.WriteStartElement("Submission");
    textWriter.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
    textWriter.WriteEndElement();
}

using (StreamWriter sw = new StreamWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)))
            {
                sw.Write(stringBuilder.ToString());
            }
도움이 되었습니까?

해결책

문제는 당신이 그것을 쓰고 있다는 것입니다 디스크 UTF-8을 사용하지만 그렇습니다 주장하다 UTF-16이기 때문에 StringWriter 기본적으로 사용 - 사용하도록 명시 적으로 설정하기 때문입니다. Encoding.Unicode 또한.

이것을 해결하는 가장 간단한 방법은 UTF-8으로 광고하는 StringWriter를 사용하는 것입니다.

public class Utf8StringWriter : StringWriter
{
    public override Encoding
    {
         get { return Encoding.UTF8; }
    }
}

... 그런 다음 제거하십시오 settings.Encoding = Encoding.Unicode 선. 이렇게하면 UTF-8을 사용할 수 있습니다. (사실, Encoding 의 자산 XmlWriterSettings 당신이 만들 때 무시됩니다 XmlWriter a TextWriter 그래도.)

당신이 정말로 원하다 UTF-16, 당신이 만들 때 StreamWriter, 지정하십시오 Encoding.Unicode 거기도.

다른 팁

나는 무엇을 잘 모른다 Encoding.Unicode 그러나 나는 파일에 문자 당 두 바이트를 작성하는 UTF-16이라고 생각합니다. 일반 ASCII 텍스트의 경우 바이트 중 하나는 항상 0입니다.

노력하다 UTF-8 대신에. 특수 문자를 사용하지 않는 한 (코드 포인트> = 128)를 사용하지 않는 한 모든 편집기에서 동일하게 보일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top