2012-04-25 3 views
1

streamwriter가 제작중인 CSV에서 잘못된 문자를 생성하는 문제가 있습니다. 문자는, 는  만 파일의 시작 부분에 나타납니다StreamWriter의 잘못된 문자

5,"GEN",555555555,,"Evan","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"[email protected]" 
5,"GEN",555555555,,"Dorathy","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"[email protected]" 
5,"GEN",555555555,,"Marvin","Smith",,,,,,,,,,,,,,,,,,,,,,,,,"[email protected]" 
.... 

는 인코딩 문제처럼 나에게 보인다. 행운을 빌어 문자열을 정리하는 다른 인코딩과 정규식을 시도했습니다. 미리보기를위한 코드는 다음과 같습니다 (복잡한 것은 아니지만). 또한 웹 프로세스로 실행 중입니다.

+0

@Lynn 클라이언트는 파일을 가져 와서 다른 프로그램에로드합니다. 개발자에게 전화를 걸었고 소프트웨어의 인코딩을 알지 못했습니다. 흥미로운 점은 OpenOffice는 문자를 표시하지만 NotePad ++ w/out BOM은 표시되지 않습니다. 아마도 BOM 바이트를 잡을 수 있습니까? – gnome

+0

트랩 할 필요가 없습니다. 아래 Martin의 답변에 따라 StreamWriter를 UTF 대신 ASCII로 출력하도록 변경하십시오. 그러면 더 이상 표시하지 않아야합니다. –

답변

4

스트림에 UTF-8 인코딩을 사용하도록 지정했으며이 초기 바이트는 유효한 UTF-8 바이트 순서 마크 (BOM)입니다. 문제는 시청자/편집자가 UTF-8 스트림을 올바르게 디코딩하지 않는다는 것입니다. 그것은 단지 문제입니다 BOM이며, 당신은 당신이 UTF8Encoding 클래스의 자신의 인스턴스를 만들 수 BOM없이 스트림을 만들려면 :

당신이 정말로 당신이해야 ASCII 데이터로 작업 할 경우
var encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); 
using (StreamWriter sw = new StreamWriter(Response.OutputStream, encoding)) ... 

대신 인코딩을 사용하십시오 :

using (StreamWriter sw = new StreamWriter(Response.OutputStream, Encoding.ASCII)) ... 
+0

+1 훨씬 유익한 대답은 내 것보다 :) –

0

아마도이 파일은 ansi가 아닌 유니 코드임을 나타내는 문자 일 수 있습니다.

파일을 텍스트 편집기에서 ANSI 파일로여시겠습니까? 그렇다면 문자를 보는 것입니다. 유니 코드로 열거 나 유니 코드가 아니도록 인코딩을 설정하십시오.

+1

자세한 내용은 해당 바이트는 UTF-8 BOM 바이트입니다. BoM을 이해하는 텍스트 편집기에는 표시되지 않습니다. http://en.wikipedia.org/wiki/Byte_order_mark –

+0

DMoses : 그건 훌륭한 정보입니다. 고맙습니다. –