2014-01-09 67 views
0

我從SQL Server數據庫中提取一些數據並將其寫入文本文件,並且大部分過程按預期工作。有一個問題我一直無法解決。撇號顯示爲:’寫入文本文件時出現撇號問題

下面是代碼寫入文件:

using (var writer = new StreamWriter(filePath, false)) 
{ 
    foreach (var textLine in dataList) 
    { 
     writer.WriteLine(textLine); 
    } 
} 

我對文字使用Encoding.DefaultEncoding.Utf8嘗試過,但沒有有所作爲。

我打開記事本,Notepad ++和UltraEdit中的文件。

任何人都可以幫助我找出這個問題嗎?

+2

它或者是堅持它的人的文化或將它拉出來 –

+0

@ARM一個深入滲透的,甚至是開創性的洞察力。 –

回答

2

你確定你試圖存儲一個真正的撇號(字符代碼39),而不是一個智能引用字符? https://en.wikipedia.org/wiki/Quotation_mark_glyphs

+0

我不是。寫入文件的文本可以通過多種方式輸入(鍵入,複製/粘貼等)。在某些情況下,撇號顯示正常,而在其他情況下,我會看到上面問題中顯示的字符。 –

+0

如果有人複製粘貼,特別是如果從Word中這樣做,他們很可能正在粘貼一個明智的報價。如有必要,您可能需要預先處理輸入以進行轉換。或者只是接受一個事實,即您可能需要存儲寬字符。 –

+2

@RonS它看起來像你越來越捲曲撇號:http://stackoverflow.com/a/2477480/424129 –

0

’是字符爲的UTF-8字節流,顯示爲具有Windows 1252代碼頁的ANSI字符。

UltraEdit應該沒有問題來檢測打開時創建的文本文件以UTF-8編碼並顯示正確。

有關在UltraEdit中如何自動檢測UTF-8編碼的詳細信息,以及在配置中未啓用自動檢測的情況下如何打開UTF-8編碼文件,請參閱我的回答(高級 - 配置 - 文件處理 - Unicode/UTF-8檢測),或者當第一個UTF-8字符不在第一個64 KB內時失敗。

通過在文件中寫入數據列表的行之前,可以通過向文件中寫入第一個3字節的0xEF 0xBB 0xBF作爲ANSI字符串顯示,幫助文本編輯器檢測文件的UTF-8編碼。 0xEF 0xBB 0xBF是以UTF-8編碼的文件的字節順序標記(BOM),文本編輯器可以識別該文件,但不會顯示。

字符也可用於代碼頁Windows 1252(十六進制值0x92),因此也可以通過從UTF-8到ANSI的轉換將其存儲在文本文件中。但是數據列表也可能包含Unicode表中的字符,這些字符在系統代碼頁中不可用,因此最好將該文件創建爲UTF-8編碼的文本文件而不是ANSI文本文件。