Neo's Blog

首頁 相本 討論 書籤

分類目錄
本站日誌 (51)
碎碎唸啦 (173)
網站架設 (84)
程式設計 (161)
軟體使用 (69)
電子商務 (126)
經營奇想 (48)
基金理財 (11)
聰明消費 (87)
電影心得 (47)
開放原碼 (16)
工作記錄 (2)
毛毛小記 (9)
就是不同 (2)




歷史資料
 




July 10, 2004
.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

 
由 Neo 發表於 July 10, 2004 05:29 PM 收進你的MyShare個人書籤  

謝謝站長的技術分享,解決了小弟一個讀檔的問題。
因為小弟需要從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)


Thomas,wu 發表於 August 11, 2004 09:10 AM

謝謝您的文章


lg 發表於 October 17, 2004 09:56 PM

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


PeterJu 發表於 December 23, 2004 02:00 PM

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


mickyp 發表於 March 16, 2005 11:18 AM

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


Joe 發表於 November 17, 2005 09:59 PM

給Joe

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

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

囧rz .. . .


囧rz 發表於 February 1, 2006 06:40 PM

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

我也是文字檔 都是亂碼


Ray 發表於 February 12, 2006 04:20 PM

Ray:

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


Neo 發表於 February 13, 2006 12:03 PM

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


lin 發表於 April 7, 2006 11:13 AM

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


china 發表於 August 28, 2006 03:30 PM

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


roy 發表於 April 2, 2007 11:12 AM

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


小羔羊 發表於 March 11, 2008 10:06 PM

感謝大大分享


Arenda 發表於 July 19, 2008 08:33 PM
發表迴響  
(*星號開頭為必填欄位)











(請輸入您看到的數字,看不到請按右鍵->顯示圖片)


記住我的資訊?







Copyright 2005 Neo's Blog All rights reserved.