2009-07-03 83 views
0

我正在研究一個簡單的Windows服務,它讀取csv數據並將數據傳輸到ms-sql服務器。 Csv包含非Unicode字符(Ç窪İİÖöÜüĞğ)。 ODBC不會傳輸正確的內核。我嘗試複製數據沒有ODBC,與文本閱讀,編碼不正確。但是當我調試服務時,文本編碼是正確的。 CSV閱讀代碼:Windows服務非Unicode編碼問題

string[] csvLines = File.ReadAllLines(csvFile, Encoding.GetEncoding(new System.Globalization.CultureInfo("tr-TR").TextInfo.ANSICodePage)); 

服務作爲LocalSystem運行,我無法改變「系統區域設置」非Unicode程序,我必須使用系統區域設置爲美國(英文)

回答

0

從內存,以你所做的方式創造一種新的文化將會使用系統默認值(例如你的案例中的「en-US」)。

因此,而不是創建一個新CultureInfo使用預緩存的一個:

CultureInfo.GetCultureInfo("tr-TR") 

當你調試,因爲代碼運行的你,而不是本地系統,和我假設你的locale是土耳其的作品。


編輯:哎呀,本來應該GetCultureInfo代替GetCulture。

此工程在我的機器上的控制檯應用程序:

Console.WriteLine("en-US: {0}", 
     CultureInfo.GetCultureInfo("en-US").TextInfo.ANSICodePage); 
Console.WriteLine("tr-TR: {0}", 
     CultureInfo.GetCultureInfo("tr-TR").TextInfo.ANSICodePage); 

輸出12521254

+0

我也試過「CultureInfo.GetCulture(」tr-TR「)」但它不工作:(你有其他想法嗎? – Murat 2009-07-06 06:28:52

+0

另一個想法:如果文件也可能使用UTF-8編碼,使用StreamReader.ReadLine,使用StreamReader構造函數版本,並將detectEncodingFromByteOrderMarks參數設置爲true。 – devstuff 2009-07-06 06:59:11

0

文件閱讀代碼看起來不錯,我相信問題在於如何調用ODBC函數。看起來編碼信息在通話之間的某處丟失。

你可以發佈顯示你的ODBC調用的代碼片段嗎?謝謝