.Net Framework 讀取檔案變亂碼的處理方式

今天因為做長榮的案子,壓根沒想到 Microsoft .Net Framework 讀取檔案竟然會出現亂碼,以前用 VB 都鮮少遇過這種事。

20040710_01.gif


重點還是在於如何解決,因為從 Windows 2000 之後的作業系統在檔案處理採用Unicode ,所以 .Net 的檔案處理也是預設為 Unicode ,但是文字檔大多還是以 ANSI 儲存,而且裡面的編碼還是用 Big5,所以才會造成中文亂碼的狀況,也就是在讀取檔案的時候就要指定編碼的樣式。

本來會造成亂碼的語法如下:

Dim reader As StreamReader =
New StreamReader(FileName)

但是問題來了,System.Text.Encoding 裡面一堆,ASCII、UTF-8 等等的,要選哪個好?

其實很簡單,用 System.Text.Encoding.Default 告訴 StreamReader 目前作業系統的編碼即可。

[VB .Net] 的寫法

Dim reader As StreamReader = _
New StreamReader(FileName, System.Text.Encoding.Default)

[C# .Net] 的寫法

StreamReader reader = _
New StreamReader(FileName, System.Text.Encoding.Default)

結果如下:
20040710_02.gif

System.Text.Encoding 可參考 MSDN:
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemtextencodingclasstopic.asp

Did you enjoy this post? Why not leave a comment below and continue the conversation, or subscribe to my feed and get articles like this delivered automatically to your feed reader.

Comments

謝謝站長的技術分享,解決了小弟一個讀檔的問題。
因為小弟需要從ANSI文字檔中取得某個起訖位罝的中文字元
因為文字檔是ANSI格式->中文碼為兩碼 ,.net為
unicode- 每個字都是一碼,先轉為byte格式,取出ANSI格式之資料(中文字算兩碼) 正確所在,再轉回unicode格式

Dim sendBytes As [Byte]() = System.Text.Encoding.Default.GetBytes(line)

Dim strValue As String = System.Text.Encoding.Default.GetChars(sendBytes, startPos, endPos - startPos)

謝謝您的文章

感謝您的分享,省了不少時間

感謝您,我正好遇到這個問題^_^

哈囉...用搜尋找到您的網站有提到關於文字文件都編碼的問題..請問我們一般不寫程式的人碰到下載回來的文字檔是亂碼該如何處理呢? 網頁還可選編碼方式,但.txt就不知怎辦了...煩請賜教 謝謝哦~~!

給Joe

下載的文字檔是亂碼的話,有一個方法給你參考看看。
你可以用 ie開啟那個文字檔,然後選擇可能的編碼。
醬子就好了

最快的方式~ 開啟IE,把該文字檔拖曳到IE後放開,即可。

囧rz .. . .

我跟Joe一樣的困難 請問ie這個檔要去哪找

我也是文字檔 都是亂碼

Ray:

有二個方法..
1.可以用 IE 開啟文字檔後選擇編碼。
(囧rz 的方法一樣,按Ctrl+O 或是拖曳進 IE 視窗)
2.用 ConvertZ 來轉碼。
http://alf-li.pcdiscuss.com/c_convertz.html

剛在學發現用notepad編輯和使用VS2003有些地方不太ㄧ樣,你的教學正好解決我的困擾,謝謝。

请问“不止北韩有飞弹是什么意思” 另感谢文章

我遇到一個問題,無論怎麼試,用開檔的方式用Net.Mail發信,用TextBox看沒問題,但收到的Mail總是會有固定幾個字變成亂碼,怎麼加 \ 都沒用,改輸出時編碼也沒用,改文件本身的編碼也沒用,我的OS是Windows 2003,使用VS2005,後來一個字一個字測,才發現,原來發生的原因是"單行字數過長",詳細是多長沒去測他,但修改原文件,把發生亂碼的那行拆成兩行再試一次就Ok了,不知是不是又是唯軟的Bug
@@|||

站長~感謝您的分享
解決我所遇到的問題 謝謝您

感謝大大分享

發表您的評論

(必要)

(必要)