伊莉討論區

標題: 如何使用c#轉換csv檔案的編碼格式為utf 8 [打印本頁]

作者: koala888    時間: 2017-7-12 11:11 AM     標題: 如何使用c#轉換csv檔案的編碼格式為utf 8

最近在用asp.net處理資料庫匯入,現在遇到csv檔案編碼的問題,要先用記事本打開csv檔案另存為編碼utf 8,然後再從網頁匯入到MS SQL資料庫,如果編碼不改的話中文字就會亂碼,對使用者來說這樣做實在是太麻煩了,我現在從網頁匯入csv檔案到資料庫已經做好了,就是直接匯入不改編碼會出現亂碼的問題,請問我要怎麼改呢?我的語言用c#,用以下的程式轉編碼為utf8結果還是失敗,仍出現亂碼

   System.Text.Encoding utf_8 = System.Text.Encoding.UTF8;

   string convertstr = cell.ToString();
   // Convert a string to utf-8 bytes.
  
   byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(convertstr);

   // Convert utf-8 bytes to a string.
    string s_unicode2 = System.Text.Encoding.UTF8.GetString(utf8Bytes);

   dt.Rows[dt.Rows.Count - 1][i] = s_unicode2;

誰可以幫忙,感激不盡
作者: Josie_2016    時間: 2017-7-12 03:17 PM

試試
  1. //讀入資料
  2. string source = File.ReadAllText(filename,System.Text.Encoding.GetEncoding("big5"));
  3. //轉換編碼
  4. byte[] buffer = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("big5"), System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding("big5").GetBytes(source));
  5. //轉成字串
  6. string target = System.Text.Encoding.UTF8.GetString(buffer);
複製代碼

作者: sam30525sam    時間: 2017-7-12 08:56 PM

這實務上蠻常遇到的,先回答你的問題。

解法我推Josie_2016的,
但是還要注意一點,因為他只限定big5,所以這樣算是半hard code,
如果你是其他編碼,那一樣會亂碼。
這時候你可能又會上來抱怨說:「每次都要將檔案轉碼成big5」。

可以再多補個編碼判斷,自動轉碼,這可做大做小。
做大就是完全自動判斷,
做小就是有限制的自動判斷。

建議你看這兩篇文章,大致都有提到
https://social.msdn.microsoft.com/Forums/zh-TW/6c5ae56e-b7c2-418d-9ab8-b5e3d5d81f23?forum=233
https://dotblogs.com.tw/rainmaker/2013/05/20/104547

=====

在實務上,我認為你的要求只是在拖延,
除非你可以做到完全自動判斷,不然怎麼做都算hard code。

與其靠程式處理,其實建議檔案提供者一律改用utf8比較快,
或者你寫個.bat檔,一次處理所有檔案,也很實際,
因為這算是內部需求,大家遵守好就好,
如果是end user需求,那就鼻子摸一摸,寫全自動判斷最好。






歡迎光臨 伊莉討論區 (http://s03.p05.eyny.com/) Powered by Discuz!