2012-04-25 43 views
1

在我正在生成的csv中,Streamwriter產生錯誤的字符時出現問題。字符,,只出現在文件的開頭:StreamWriter錯誤的字符

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

在我看來就像一個編碼的問題。我已經嘗試了不同的編碼,並且還有一個正則表達式來清理字符串,但運氣不大。這是用於預覽的代碼(儘管它並不複雜)。它也作爲一個web進程運行。

+0

@Lynn不幸的是,客戶端將該文件加載到另一個程序中。我打電話給開發人員,不知道他們的軟件的編碼。有趣的是,OpenOffice會顯示字符,但NotePad ++ w /或w/out BOM不顯示。也許我可以捕獲BOM字節? – gnome 2012-04-25 15:40:06

+0

沒有必要陷入困境;根據Martin在下面的回答,將您的StreamWriter更改爲輸出ASCII而不是UTF,並且您不應再看到它們。 – 2012-04-25 16:23:37

回答

4

您已指定要爲流使用UTF-8編碼,並且這些起始字節是有效的UTF-8字節順序標記(BOM)。問題很明顯,您的瀏覽器/編輯器不能正確解碼UTF-8流。如果僅是問題的BOM,你想沒有一個BOM創建一個流,你可以創建自己的UTF8Encoding類的實例:

var encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false); 
using (StreamWriter sw = new StreamWriter(Response.OutputStream, encoding)) ... 

如果你真的想和你應該ASCII數據工作使用該編碼,而不是:

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

+1對於比我的信息更豐富的回答:) – 2012-04-25 16:37:28

0

這些可能是指定文件是unicode而不是ansi的字符。

您是否將文件作爲ANSI文件在文本編輯器中打開?如果是這樣,那就是你看到這些角色的原因。嘗試將其打開爲unicode,或將您的編碼設置爲unicode。

+1

有關更多信息,這些字節是UTF-8 BOM字節。他們不會在理解BoM的文本編輯器中顯示。 http://en.wikipedia.org/wiki/Byte_order_mark – 2012-04-25 15:35:45

+0

DMoses:這是非常棒的信息;謝謝。 – 2012-04-25 16:36:37