none
vb2008 讀取不同編碼文字檔 RRS feed

  • 問題

  • 請問如何可以把不同編碼文字檔 自動判斷再寫到TEXTBOX上?

    另外,怎樣把TEXTBOX裡的文字 自由轉換編碼?

    另外,如果我用以下方法讀寫檔案 是否沒法更改編碼??會有比較好的方法嗎??

     

            dlgOpen.Filter = "純文字檔|*.txt"

            dlgOpen.FileName = ""
            dlgOpen.ShowDialog()
            If dlgOpen.FileName = "" Then
                Exit Sub
            End If
            Try
                 textbox1.Clear()
                FileOpen(1, dlgOpen.FileName, OpenMode.Input)
                Do Until EOF(1)
                    textbox1.SelectedText = LineInput(1) & vbCrLf
                Loop
                FileClose(1)

    麻煩你們幫我這個菜鳥了




    • 已編輯 KenLamX 2014年1月5日 下午 02:40
    2014年1月5日 下午 02:39

解答

所有回覆

  • 建議好好讀讀MVP 黑大的 中文編碼 系列。

    另外 MVP Allen 也有一些不錯的 中文編碼 參考資料。


    理直氣和,切記。

    MVA微軟免費中文影音線上教學網站

    個人


    2014年1月5日 下午 03:00
  • 您好,
    請參考「透過StreamReader.CurrentEncoding判斷檔案的編碼」,希望對您有幫助,謝謝!
    透過「StreamReader」來讀取文字檔,設定偵測檔案編碼並設定預設的編碼,應該可以順利的讀取文字檔。

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2014年1月6日 上午 07:26
  • 您可以參考這篇文件的做法:Detecting Text Encoding for StreamReader

    2014年1月6日 上午 08:41
  • 檢查 BOM ,若符合指定編碼字元,就用該編碼開啟,若不符合,就用 Default 開啟。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年1月6日 下午 03:42
  • 以下是我的讀取程式碼

    沒錯 是成功讀取不同格式編碼, 但我發現他是根據以下有底線那句輸出文字(例如我用Encoding.GetEncoding(950), 他就用BIG5輸出, 但如果我用其他, 例如:Encoding.UTF8 他就會亂碼)

    我是錯了什麼地方?!

    ------------------------------------------------------------------------------------------

    Dim fs As FileStream = File.Open("C:\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
       

        Dim sr As StreamReader = New StreamReader(fs, Encoding.GetEncoding(950), True)

            TextBox2.Text = sr.CurrentEncoding.BodyName.ToString()
            sr.Close()
            fs.Close()

            If TextBox2.Text = "utf-8" Then
                Dim SrUTF8 As StreamReader = New StreamReader("C:\test.txt", Encoding.UTF8, True)
                RichTextBox1.Text = SrUTF8.ReadToEnd
                SrUTF8.Close()
                TextBox2.Text += "1"

            ElseIf TextBox2.Text = "big5" Then
                Dim SrBIG5 As StreamReader = New StreamReader("C:\test.txt", Encoding.GetEncoding(950), True)
                RichTextBox1.Text = SrBIG5.ReadToEnd
                SrBIG5.Close()

            ElseIf TextBox2.Text = "unicodeFFFE" Then
                Dim SrBigEndianUnicode As StreamReader = New StreamReader("C:\test.txt", Encoding.BigEndianUnicode, True)
                RichTextBox1.Text = SrBigEndianUnicode.ReadToEnd
                SrBigEndianUnicode.Close()

            ElseIf TextBox2.Text = "utf-16" Then
                Dim SrUnicode As StreamReader = New StreamReader("C:\test.txt", Encoding.Unicode, True)
                RichTextBox1.Text = SrUnicode.ReadToEnd
                SrUnicode.Close()

            End If

                             

    • 已編輯 KenLamX 2014年1月7日 下午 01:32
    2014年1月7日 下午 01:32
  • 你現在是 Reader

    檔案是啥格式就只能用該格式去讀,當然不能隨便換。

    你要測試要先準備多種格式檔案。

    另外不要用 TextBox

    用 ComboBox ,直接用 key

    這樣就可以精簡為:

    RichTextBox1.Text = New StreamReader("C:\test.txt", Encoding.GetEncoding(ComboBox.Text), True).ReadToEnd

    支援那些編碼由 ComboBox 決定即可。


    T.L. Cheng

    2014年1月7日 下午 03:13
    版主
  • 你現在是 Reader

    檔案是啥格式就只能用該格式去讀,當然不能隨便換。

    你要測試要先準備多種格式檔案。

    另外不要用 TextBox

    用 ComboBox ,直接用 key

    這樣就可以精簡為:

    RichTextBox1.Text = New StreamReader("C:\test.txt", Encoding.GetEncoding(ComboBox.Text), True).ReadToEnd

    支援那些編碼由 ComboBox 決定即可。


    T.L. Cheng

    用你這方法有奇怪事發生

    除了BIG5編碼檔案只可用BIG5編碼輸出正常文字外,

    其他編碼的檔案都可以用任一編碼輸出正常文字


    • 已編輯 KenLamX 2014年1月9日 下午 12:45
    2014年1月9日 下午 12:43
  • 你有做 BOM 偵測嗎?

    沒有的話只能依前面網友的方式用人工選碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年1月9日 下午 02:12
  • 你有做 BOM 偵測嗎?

    沒有的話只能依前面網友的方式用人工選碼。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    對不起 請問怎做BOM偵測
    2014年1月9日 下午 02:38
  • 您好,
    使用以下的方式應該就可以了,如果那些檔案有ByteOrderMarks的話,就會自動判斷,如果沒有的話,就會用big5去開啟,如下,

    Using fs As FileStream = File.Open("h:\test.txt", FileMode.Open, FileAccess.Read, FileShare.Read)
    	Using sr As StreamReader = New StreamReader(fs, Encoding.GetEncoding(950), True)
    		RichTextBox1.Text = sr.ReadToEnd
    	End Using
    End Using

    但是,如果有些UTF8編碼,但沒有BOM的話,就可能會變亂。

    其他資訊請參考:

    http://www.mobzystems.com/code/text-encoding-and-net


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2014年1月10日 上午 05:29
    2014年1月10日 上午 05:22