2013-01-23 26 views
1

我有一位客戶要求我們編寫一個從他們的數據庫獲取數據並將其輸出到.csv文件的c#應用程序。到現在爲止還挺好。使用c轉換Unicode字符#

該DB包含一些Unicode字符,當客戶端用Excel打開.csv時,這些字符看起來很「怪異」。例如:當客戶認爲它應該看起來像破折號時,x0096看起來像是一個在歐元貨幣符旁邊的胡蘿蔔。

所以我被要求讓這些角色看起來「不太奇怪」。

我已經爲每個奇怪的字符寫了代碼(我有如下12行)。

input = input.Replace((char)weirdCharacter, (char)normalCharacter); 

有一個更好的辦法。

+1

那麼,數據庫和CSV文件使用什麼編碼? –

+0

第一個想法是製作一個怪異和普通字符數組,並循環遍歷它(而不是每行一行)。但它仍然有點怪異。 – Floris

+3

[絕對最低限度每個軟件開發者絕對積極地必須知道Unicode和字符集(沒有藉口!)](http://www.joelonsoftware.com/articles/Unicode.html) – mellamokb

回答

1

我在生成HTML文件時遇到了同樣的問題。我的解決方案是改變我的輸出文件的編碼。

StreamWriter swHTMLPage = 
       new System.IO.StreamWriter(OutputFileName, false, Encoding.UTF8); 

一旦我添加了Encoding.UTF8參數,字符開始正確顯示。我不知道這是否可以應用到您的解決方案,雖然因爲涉及Excel,但我敢打賭它可以。

+0

假設數據庫始終使用UTF-8,這應該可以做到。 –

0

正如文森特詹姆斯所說,如果這是一個編碼問題,那麼解決這個問題的理想方法是在解碼/編碼該值時使用正確的編碼,但如果仍然不起作用...

我認爲這很簡單。你怎麼看?:

Dictionary<char, char> substitutions = new Dictionary<char, char> { 
    {'\0x0096', 'F'}, {'\0x0101', 'O'}, {'\0x0121', 'O'}, ... 
}; 

foreach(KeyValuePair<char, char> pair in substitutions) 
{ 
    input.Replace(pair.Key, pair.Value); 
}