2012-01-16 21 views
-4

我正在做一個SQL表數據拷貝。首先,我從csv文件中獲取所有數據(從sql表中獲取),但是當我將它插入表中時,我得到'?'在sql表中。我不使用任何編碼,所以一切都是默認的。有人知道爲什麼發生這種情況?C#:sql表數據文本有'?'代替'é'後副本

解決:

所需讀取CSV這樣的:

string[] csvlines = File.ReadAllLines("C:\\export.csv",Encoding.GetEncoding("Windows-1252"));

感謝

+0

從哪裏轉移到哪裏?你是如何轉移的?編碼是什麼來源?你在目標上使用什麼編碼?請發佈您的當前代碼。 – Oded 2012-01-16 14:22:51

+2

您應該使用您在創建SQL表時指定的編碼。有關.NET提供的(提供的)編碼列表==> http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx – yas4891 2012-01-16 14:23:19

+1

我同意這個問題質量差,但恕我直言,它可以通過編輯進行改進。經過(良好)編輯後,它很可能會成爲未來開發者的一個很好的來源,並且會遇到同樣的問題。tl; dr:請問downvoter,請解釋他爲什麼downvoted? – yas4891 2012-01-16 14:27:07

回答

2

一般來說,你應該使用表創建時的任何編碼使用(或最後修改 - 爲nitpickers)。 如果您在不同的表格之間傳輸數據,則可能需要使用不同的編碼來讀取和寫入數據。

.NET Framework提供了豐富的實施編碼,你可以在下面找到這種類型的列表:System.Text.Encoding

UPDATE

請使用Notepad++,以確定該.csv文件的編碼你正在讀取數據。然後在StreamReader對象的構造函數中使用該編碼。

所以如果記事本++告訴您該文件在編碼UTF-8,使用下面的代碼行從文件讀取:

using(var reader = new StreamReader(new FileStream("myCSVfile.txt", FileMode.Open, FileAccess.Read), Encoding.UTF8) 
{ 
    // read file content here 
} 
0

MSDN:爲操作系統的當前ANSI代碼頁的編碼。 我建議你在數據庫中使用nvarcharnchar數據類型和類似字符串值之前使用N:N「الله」

0

我認爲它的UTF-8,你是尋找這個charé。

我不是太熟悉C#,但這個鏈接看起來是一個良好的開端

http://startbigthinksmall.wordpress.com/2009/01/20/utf8encodingdefault-encodingutf8-net-c/ 從文章:

貌似UTF8Encoding.Default將返回 UTF8Encoding的默認實例,對?

嗯,它不會 - 它返回操作系統的默認ANSI 編碼。

與ASCIIEncoding相同.Default,UnicodeEncoding.Default, UTF32Encoding.Default和UTF7Encoding.Default!

爲什麼?因爲它們都來自System.Text.Encoding默認 Defined:

+0

你如何演繹它是UTF-8(而不是Unicode/UTF-16 /某些其他編碼),因爲該字符是é? – yas4891 2012-01-16 14:36:52

+0

說實話,我是根據過去的經歷猜測的。我以前從MSSQL DB讀取特殊字符時遇到問題。通常是因爲默認編碼不是UTF-8(例如拉丁文-1)。我想我最初可能誤解了你的問題。 – edos 2012-01-16 15:15:16