2013-04-10 4 views
1

저는 csv 파일을 만들고 브라우저로 보내고 있습니다. 일부 설치에서는 http 응답 본문의 시작 부분에 추가 문자가 추가되어 파일을 삭제합니다.csv 파일의 추가 문자

내 코드는 다음과 같습니다.

Dim File As New Text.StringBuilder 
File.Append("Batch Name,") 
File.Append("Batch Accepted Total") 
File.AppendLine 

For Each Batch In Batches 
    File.Append(Batch.Name) 
    File.Append(",") 
    File.AppendFormat("{0:c}", Batch.AcceptedTotal) 

    File.AppendLine 
Next 

Dim FileName = "SomeFile.csv" 
Dim Encoder = Text.Encoding.UTF8 
Dim FileData = Encoder.GetBytes(File.ToString) 

Response.Clear 
Response.ClearHeaders 
Response.Buffer = True 
Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName) 
Response.ContentType = "text/plain" 
Response.OutputStream.Write(FileData, 0, FileData.Length) 
Controller.FileData = Nothing 
Response.Flush 
Response.End 

일부 설치 만 수행하며 일부는 수행하지 않습니다. 나는 이유를 모른다. 데이터베이스를 바꿔도 동일한 사이트에 여전히 문제가 있습니다. 그래서 나는 그것이 데이터에 의존하지 않는다는 것을 안다.

이 파일이

781 
Batch Name,Batch Accepted Total 
3/8/2013,$961.24 
Lincoln Payroll,$999.99 

0 

첫 번째 줄의 변경에 718처럼 보이는 끝나는 것입니다. 그것은 파일의 크기에 따라 솔기가 있습니다. 결국 여분의 0은 절대로 바뀌지 않으며 어디에서 오는 것인지도 모르겠습니다.

업데이트 : 첫 번째 줄은 의도 한 내용의 길이가 16 진수임을 발견했습니다. 또한이 줄을 제거하면 추가 문자가 제거됩니다.

Response.Flush 

나는 아직도 이유를 모른다. 그 라인은 필요하지 않았기 때문에 픽스를 찾지 못했습니다. 그러나 어떤 일이 일어나고 있는지에 대한 단서가 있다면 나는 그것을 듣고 싶습니다.

답변

0

CSV의 경우 Response.ContentType은 "text/csv"입니다. 또한 StreamWriter 클래스를 사용하여 CSV를 작성하십시오.

0

UTF8 인코딩과 관련이 있다고 추측 할 것입니다. 마지막 문자는 어쨌든 EOF 일 것입니다. 그런 다음 2 바이트로 인코딩되고 수신기는 UTF8로 처리하지 않지만 2 바이트 문자를 제외한 모든 것을 이해합니다. 수신자 (메모장?)는 문자 인코딩 당 1 바이트 (보통 ASCII 문자 일 수 있음)로 취급합니다.

오, 업데이트를 확인했습니다. 가짜 바이트는 사물을 주변으로 이동 시켜야만합니다. 가짜 최종 0을 얻기에 충분하지만 전체 파일을 손상시킬 정도는 아닙니다.

마지막으로 놀랄만 한 인코딩으로 파일 작업을해야했지만, 가능한 모든 인코딩을 시도했습니다. 일부는 완전히 엉망진창이었고, 일부는 읽기 쉽고, 하나는 스팟이었습니다.

0

응답 헤더에서 서버 다시 쓰기 규칙을 사용하지 않도록 설정하여 IIS 8.5에서 똑같은 문제를 해결했습니다. SSV (SQL Server Reporting Services)에서 추가 된 줄과 손상된 PDF가있는 CSV가 만들어졌습니다.