2014-01-22 11 views
1

웹 브라우저에서 XML을 사용자에게 반환하는 코드가 있습니다.C#에서 XML 파일을 올바르게 인코딩하는 방법

public FileResult GetReportParameters(string reportId) 
{ 
    string parameters = "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\r\n" + 
     LoadXml(reportId).ToString(); 

    return File(System.Text.Encoding.Unicode.GetBytes(parameters), "application/xml"); 
} 

LoadXML은 데이터베이스에서 XML을로드하고이를 XElement 객체로 반환합니다. C#의 문자열은 UTF-16입니다. 따라서 모든 것이 올바르게 인코딩되도록하려면 인코딩에 대해 UTF-16을 지정하고 유니 코드 인코딩을 사용하여 텍스트를 File 생성자의 byte [] 배열로 변환하십시오.

Visual Studio에서이 도구를 실행하면 IE의 XML 시각화 프로그램에서 제대로 작동하고 표시됩니다. 그러나, 나는 이것을 우리 웹 서버에 게시 한 후 작동하지 않으며 IE는 다음과 같은 오류를 제공합니다.

XML 페이지를 표시 할 수 없습니다. XSL 스타일 시트를 사용하여 XML 입력을 볼 수 없습니다. 오류를 수정 한 다음 새로 고침 단추를 클릭하거나 나중에 다시 시도하십시오.


이름이 잘못된 문자로 시작되었습니다. 오류 처리 리소스

대신 UTF-8을 사용하여 IE의 XML visuallizer에 표시 할 수있었습니다.

public FileResult GetReportParameters(string reportId) 
{ 
    string parameters = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
     LoadXml(reportId).ToString(); 

    return File(System.Text.Encoding.UTF8.GetBytes(parameters), "application/xml"); 
} 

그러나 유니 코드 문자가 잘못 표시되지 않습니까? 이 작업을 수행하는 올바른 방법은 무엇입니까? 내가 코드를 생산하고 HexMode에서 PSPad의 개방을 파일 또는 개별 바이트 볼 수 있습니다 다른 편집기를 저장하려고 할 것이다

감사

+0

UTF-8도 유니 코드입니다 (http://en.wikipedia.org/wiki/UTF-8 참조). 왜 UTF-16을 사용해야한다고 생각하는지 모르겠지만 UTF-8은 내가 일반적으로 사용하는 것이며 일반적으로 다른 사람들이 사용하는 것을 볼 수 있습니다. – CodingGorilla

+0

어딘가에 C# 문자열이 유니 코드로 저장되고 System.Text.Encoding.Unicode의 경우 '리틀 엔디안 바이트 순서를 사용하여 UTF-16 형식의 인코딩을 가져옵니다.'라는 메시지가 표시됩니다. 그래서 나는 C#에서 문자열을 저장하는 방법을 추측 했으므로 UTF-16을 사용해야합니다. C#가 문자열을 내부적으로 어떻게 저장하는지는별로 중요하지 않다고 생각합니다. 그러나 UTF-16 (Encoding.Unicode 사용)으로 인코딩하고 UTF-16을 사용하도록 IE에 지시하면 작동하지 않아야합니까? 어쨌든 유니 코드 문자열은 다양한 방법으로 올바르게 인코딩 될 수 있습니다. 그래서 UTF8이 작동한다면 나는 이것을 위해 UTF8을 사용할 것입니다. –

+2

오, 더 많은 독서를했습니다. XML 표준은 UTF8 인코딩을 사용한다고 말합니다. 따라서 다른 인코딩을 사용하면 XML을 읽는 프로그램이 어떤 인코딩이 사용되었는지를 나타내는 xml 속성을 읽을 수 없게 될 수도 있습니다. –

답변

0

. 아마도 IE는 파일 시작 부분의 바이트 순서 표시 (BOM) 만보고 "인코딩 = UTF16"특성을 무시합니다. BOM이 없으면 XML 표준은 인코딩이 UTF8이고 대부분의 소프트웨어가 해당 표준을 인식하도록 지시합니다.

관련 문제