2011-11-14 202 views
1

即使我使用UTF-8編碼,並且我已將detectEncodingFromByteOrderMarks(BOM)設置爲true,StreamReader會將' - '(alt + 0150)讀爲 。任何人都可以指導我嗎?StreamReader奇怪的錯誤與

+0

你試過Unicode編碼嗎? –

+0

是的,先生,也試過tat也 – tmjam

回答

3

該字節代碼將不會出現在UTF-8編碼的文本的額外的東西。當用utf-8編碼時,它是'\ u2013',0xe2 + 0x80 + 0x93。如果在數字小鍵盤上鍵入Alt + 0150時出現此字符,則默認系統代碼頁可能爲1252.只需將Encoding.Default傳遞給StreamReader構造函數即可。

+0

完美 默認編碼沒有detectEncodingFromByteOrderMarks參數的作品。你們是非常感謝謝謝盧卡斯一噸 – tmjam

2

您需要知道用於編碼文本的編碼。這是沒有辦法的。嘗試不同的編碼,直到獲得理想的結果。

從MSDN:

的detectEncodingFromByteOrderMarks參數檢測由 編碼看的前三個字節流。如果文件以適當的字節順序標記開始,它會自動識別UTF-8,小端Unicode和大端Unicode文本 。否則,使用用戶提供的編碼 。有關更多信息,請參閱Encoding.GetPreamble 方法。

這意味着使用BOM只是可能會或可能無法正常工作,也可以很容易地重寫

+0

是試圖其他編碼 – tmjam

+0

有關使用detectEncodingFromByteOrderMarks參數的好處。謝謝 ! – tmjam

1

由於其他用戶寫道,此問題的可能原因是您正在嘗試讀取的文件的ANSI編碼。我已經重新創建了以ANSI編碼保存文件時描述的問題。

嘗試使用此代碼:

var stream = new StreamReader(fileName, Encoding.Default); 

Encoding.Default參數是很重要的位置。這段代碼應該正確地讀取你提到的字符。

+0

! – tmjam