none
開啟的文字檔是ASCII(或稱為ANSI)的文字檔,中文字的部份會變成亂碼 RRS feed

  • 問題

  • 使用Microsoft.VisualBasic.FileIO.TextFieldParser("C:\text.txt")開啟test.txt的檔案,但只有unicode的文字檔中文的部份才可以正常顯示,如果開啟的文字檔是ASCII(或稱為ANSI)的文字檔,中文字的部份會變成亂碼,試過先宣告
    Dim defultEncoding As Encoding
    defultEncoding = Encoding.ASCII
    Microsoft.VisualBasic.FileIO.TextFieldParser("C:\text.txt", defultEncoding)
    ,但到的情況還是一樣,請各位高手指點一下,謝謝
    2006年4月24日 上午 03:33

解答

  • 我是這樣讀文字檔:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=95

    如果是 CSV 格式 (以逗號分隔) 就直接用這個:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=208

    事實上在 .Net 內,不管哪個元件都是用 Unicode 為編碼,所以你只需要指定來源編碼方式,讓他由 big5 -> Unicode 後,再丟給 datagridview 顯示即可。

    2006年4月24日 上午 07:15
    版主
  • 我試過只要用我說的 Encoding.GetEncoding(950) 就可以了,請參考以下程式碼 :

    Dim defaultEncoding As Encoding
    defaultEncoding = Encoding.GetEncoding(950)


    Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\TEST.TXT", defaultEncoding)

    ' 表示檔案內容是字元分隔。
    myReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
    ' 定義文字檔的字元分隔符號。
    myReader.Delimiters = New String() {","}

    Dim currentRow As String()
    While Not myReader.EndOfData
    currentRow = myReader.ReadFields()
    For Each currentField As String In currentRow
    Debug.Print(currentField)
    Next
    End While

    我想你之前測試不行的原因是你的 code 將 myReader 指定了兩次,以下的紅色那一行將你指定的 defaultEncoding "蓋掉" 了。

    Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(C:\TEST.TXT, defaultEncoding)

    myReader = My.Computer.FileSystem.OpenTextFieldParser("C:\TEST.TXT")




    2006年4月24日 下午 02:30

所有回覆

  • Hi,

    請你改用 System.Text.Encoding.GetEncoding(950) 取代 Encoding.ASCII 試看看。
    2006年4月24日 上午 05:23
  •     Private Sub butUpLoadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butUpLoadFile.Click

             Dim defaultEncoding As Encoding
            defaultEncoding = Encoding.ASCII
      
            Me.dgvUpLoadFile.Rows.Clear()

            Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(C:\TEST.TXT, defaultEncoding)

            myReader = My.Computer.FileSystem.OpenTextFieldParser("C:\TEST.TXT")

            ' 表示檔案內容是字元分隔。
            myReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
            ' 定義文字檔的字元分隔符號。
            myReader.Delimiters = New String() {","}

            'dgvUpLoadFile為DataGridView元件的名稱       

    dgvUpLoadFile.ColumnHeadersVisible = True
            ' 設定欄標題樣式。
            Dim columnHeaderStyle As New DataGridViewCellStyle()

            columnHeaderStyle.BackColor = Color.Beige
            columnHeaderStyle.Font = New Font("Verdana", 10, FontStyle.Bold)
            dgvUpLoadFile.ColumnHeadersDefaultCellStyle = columnHeaderStyle

            Dim currentRow As String()
            Dim myRowCount As Integer = 1
            Dim myColCount As Integer = 0

            ' 循環處理文字檔中的所有欄位。
            While Not myReader.EndOfData
                Try
                    currentRow = myReader.ReadFields()
                    If myRowCount = 1 Then
                        For Each currentField As String In currentRow
                            ' 動態設定 DataGridView 控制項的欄位數目。
                            dgvUpLoadFile.ColumnCount = myColCount + 1
                            ' 設定 DataGridView 控制項各欄的標題名稱。
                            dgvUpLoadFile.Columns(myColCount).Name = currentField
                            myColCount += 1
                        Next
                    Else
                        Me.dgvUpLoadFile.Rows.Add(currentRow)
                    End If
                Catch ex As MalformedLineException
                    MessageBox.Show(ex.Message)
                End Try
                myRowCount += 1
            End While

        End Sub

    我要在datagridview可以正常秀出big5的字,非常感謝高手出手協助,我

     Nick Shen 寫信:
    Hi,
     
    請你改用 System.Text.Encoding.GetEncoding(950) 取代 Encoding.ASCII 試看看。

    2006年4月24日 上午 06:13
  • 我是這樣讀文字檔:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=95

    如果是 CSV 格式 (以逗號分隔) 就直接用這個:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=208

    事實上在 .Net 內,不管哪個元件都是用 Unicode 為編碼,所以你只需要指定來源編碼方式,讓他由 big5 -> Unicode 後,再丟給 datagridview 顯示即可。

    2006年4月24日 上午 07:15
    版主
  • 感謝璉璉高手的鼎力相助,但小弟可能要花點時間去瞭解一下。請問還有沒有比較簡單的做法
    2006年4月24日 上午 08:20
  • 我試過只要用我說的 Encoding.GetEncoding(950) 就可以了,請參考以下程式碼 :

    Dim defaultEncoding As Encoding
    defaultEncoding = Encoding.GetEncoding(950)


    Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\TEST.TXT", defaultEncoding)

    ' 表示檔案內容是字元分隔。
    myReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
    ' 定義文字檔的字元分隔符號。
    myReader.Delimiters = New String() {","}

    Dim currentRow As String()
    While Not myReader.EndOfData
    currentRow = myReader.ReadFields()
    For Each currentField As String In currentRow
    Debug.Print(currentField)
    Next
    End While

    我想你之前測試不行的原因是你的 code 將 myReader 指定了兩次,以下的紅色那一行將你指定的 defaultEncoding "蓋掉" 了。

    Dim myReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(C:\TEST.TXT, defaultEncoding)

    myReader = My.Computer.FileSystem.OpenTextFieldParser("C:\TEST.TXT")




    2006年4月24日 下午 02:30
  • 我在處理以FtpWebRequest,FtpWebResponse做ftp client時

    在檔案列表,檔名處理,及檔案內容等,也遇到同樣問題

    但是Nick提供的方法確實有效的該顯示正常

    非常感謝!!

    -Winson

    2006年5月18日 上午 09:49