在C#中,我正在讀取從文本文件插入SQL語句,然後嘗試使用ADO.NET在數據庫上執行它們。其中一些查詢中包含希臘字符。具體來說,Mu(看起來很時髦)用於微秒(usec)。問題在於問號實際上被插入到數據庫中(?sec)。但是,我感覺問題在於讀取文本文件,因爲調試器也在鑽石內部顯示問號。我正在使用StreamReader的ReadLine方法。我究竟做錯了什麼?如何從文件中讀取特殊字符?
2
A
回答
4
問題幾乎可以肯定的是,當你讀取文件時,你使用了錯誤的編碼。你知道什麼編碼你的文本文件實際上是在?大多數.NET API默認使用UTF-8,但您的文件可能在處於操作系統的默認編碼中,該編碼由Encoding.Default表示。試試這個:
using (StreamReader reader = new StreamReader(filename, Encoding.Default))
{
...
}
我也強烈建議您嘗試得到它的工作而不觸及數據庫。閱讀文件中,然後打印出字符串中的字符在他們的Unicode編碼方面:
public static void DumpString(string text)
{
Console.WriteLine("Text: '{0}'", text);
foreach (char c in text)
{
Console.WriteLine("{0}: U+{1:x4}", c, (int) c);
}
}
如果給出正確的結果,然後嘗試將其插入到數據庫中。這樣,如果數據庫之後看起來「錯誤」,那麼您知道問題出在您的數據庫訪問上,而不是文件訪問上。
2
您需要檢查三兩件事:
- 當你打開的StreamReader
- 在數據庫服務器上的列類型(nvarchar的,而不是爲varchar)
- 在該效果的歸類中使用的編碼列
如果其中任何一個都是錯誤的,當您從數據庫讀取數據時會得到錯誤的值。
相關問題
- 1. 如何使用C#從rtf文件讀取特殊字符?
- 2. 爲什麼特殊字符從文件中讀取爲false
- 3. 從無特殊字符的文件中讀取
- 4. 如何從文件中讀取特殊字符浮子式數字
- 5. 如何讀取特殊字符
- 6. FileOpenPicker - 如何讀取特殊字符
- 7. 使用Javascript從外部文件讀取UTF-8特殊字符
- 8. 正在從JSONP文件正確讀取特殊字符
- 9. 用特殊字符在Matlab中讀取文本文件
- 10. 存儲從文件中讀取的文字(不包括特殊字符)
- 11. 擊:特殊字符閱讀文件
- 12. 如何從文本文件中讀取特定的字符串
- 13. 讀取.txt文件中的特殊字符 - PHP
- 14. 在c中使用特殊字符讀取和寫入文件
- 15. 熊貓:讀取列中特殊字符的文件
- 16. 用特殊字符讀取java中的xml文件
- 17. 從txt文件讀取內容到包含特殊字符的字符串
- 18. 無法從PHP中讀取的特殊字符(例如「。」)
- 19. 從字符串文件中讀取時如何識別特殊的分隔符字符串?
- 20. 如何打印包含特殊字符並從文件中讀取的字符串?如何打印沒有特殊字符?
- 21. 如何讀取名稱中包含空格和特殊字符的文件?
- 22. 如何在XML文件中使用特殊字符並正確讀取它?
- 23. 如何閱讀包含特殊字符的ANSI編碼文件
- 24. 在IE8中沒有正確地從JSONP文件讀取特殊字符
- 25. 蟒蛇從文件中讀取特殊字符,並打印出來
- 26. 從帶有特殊字符的文件中讀取鏈接列表#
- 27. 從文件中讀取prolog在特殊字符上拋出錯誤
- 28. PHP無法讀取具有特殊字符的文件名!
- 29. 有特殊字符PHP麻煩通過讀取txt文件flie_get_contents
- 30. 如何讀取和寫入特殊字符,在xml中,android
這似乎是伎倆。但是,我不確定我是否理解這整個編碼的事情。如果另一個具有不同默認編碼的用戶修改了該文件,然後我嘗試用新文件重新運行我的應用程序,該怎麼辦?它會不再起作用嗎?我應該使用Encoding.UTF8嗎? – bsh152s 2009-08-13 21:34:42
使用UTF-8是一個更好的主意,是的 - 但你需要確保你始終知道編碼的真正含義。你能確保文件將*永遠*保存爲UTF-8? – 2009-08-13 22:33:25