当前位置:编程学习 > C#/ASP.NET >>

怎么输出UTF-8编码的文本文件?

怎么输出UTF-8编码的文本文件?

如果是中文输出UTF-8编码的文本文件打开后是不是看不见中文了? --------------------编程问答-------------------- System.IO.File.WriteAllBytes("C:\\1.txt", Encoding.UTF8.GetBytes("字符串")); --------------------编程问答-------------------- System.IO.File.WriteAllBytes("C:\1.txt", Encoding.UTF8.GetBytes("字符串")) --------------------编程问答--------------------
'带 BOM 头的'
Dim sw As New System.IO.StreamWriter("C:\temp\1.UTF-8.txt", False, System.Text.Encoding.UTF8)
sw.WriteLine("english")
sw.WriteLine("中文")
sw.Flush()
sw.Close()
--------------------编程问答-------------------- 我的WIN7记事本开UTF8文件没问题。 --------------------编程问答--------------------
ADODB.Recordset(1) 
DataSet.Tables(0).Rows(0).Item(1)

這兩句代碼是相同的么? --------------------编程问答--------------------
引用 3 楼 Tiger_Zhao 的回复:
'带 BOM 头的'
Dim sw As New System.IO.StreamWriter("C:\temp\1.UTF-8.txt", False, System.Text.Encoding.UTF8)
sw.WriteLine("english")
sw.WriteLine("中文")
sw.Flush()
sw.Close()

(Byte Order Mark)
带BOM头与不带BOM头有什么区别? --------------------编程问答--------------------
引用 6 楼 appleller 的回复:
带BOM头与不带BOM头有什么区别?

带 BOM 头,文本编辑器可以用明确的编码进行解码,不出错——除非编辑器不支持。
没带 BOM 头,文本编辑器只能猜测或用默认编码进行解码,容易出现“乱码”。 --------------------编程问答--------------------
引用 7 楼 Tiger_Zhao 的回复:
Quote: 引用 6 楼 appleller 的回复:
带BOM头与不带BOM头有什么区别?

带 BOM 头,文本编辑器可以用明确的编码进行解码,不出错——除非编辑器不支持。
没带 BOM 头,文本编辑器只能猜测或用默认编码进行解码,容易出现“乱码”。

请教
是不是普通的文本文件另存的时候,有个编码选择项,选择UTF-8就是不带BOM头的UTF-8的文件了?
我试了一下好像内容没有什么变化 --------------------编程问答-------------------- 看你用什么编辑器,比如vs有utf8 with signature和utf8 withou signature两种编码,大多数编辑器也都有两种选择,除了notepad,它只有一种带bom的。 --------------------编程问答-------------------- 编辑器相关。
比如记事本保存 UTF-8 必定是带 BOM 的。
EmEditor 保存 UTF-8 时还有个选项可选是否带 BOM。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 我用如下功能从DataGridView里输出的CSV文件是否是UTF8格式? 是否是不带BOM头的?
如果不是怎样修改?

 Public Shared Sub ExportToCSV(ByVal dgv As DataGridView, Optional ByVal strfilename As String = "")
        Dim saveFileDialog As New SaveFileDialog()
        saveFileDialog.Filter = "Excel文件(*.csv)|*.csv|所有文件(*.*)|*.*"
        saveFileDialog.FilterIndex = 0
        saveFileDialog.FileName = strfilename
        saveFileDialog.RestoreDirectory = True
        saveFileDialog.Title = "保存为CSV文件"
        saveFileDialog.ShowDialog()

        If saveFileDialog.FileName.IndexOf(":") < 0 Then
            Exit Sub
        End If
        '被点了"取消" 
        Dim myStream As IO.FileStream
        myStream = saveFileDialog.OpenFile()
        Dim sw As New IO.StreamWriter(myStream, System.Text.Encoding.UTF8)
        Dim columnTitle As String = ""
        Try
            '写入列标题 
            For i As Integer = 0 To dgv.ColumnCount - 1
                If i > 0 Then
                    'columnTitle += vbTab
                    columnTitle += ","
                End If
                columnTitle += dgv.Columns(i).HeaderText
            Next

            sw.WriteLine(columnTitle)

            '写入列内容 
            For j As Integer = 0 To dgv.Rows.Count - 1
                Dim columnValue As String = ""
                For k As Integer = 0 To dgv.Columns.Count - 1
                    If k > 0 Then
                        columnValue += ","
                    End If
                    If dgv.Rows(j).Cells(k).Value Is Nothing Then
                        columnValue += ","
                    Else
                        columnValue += dgv.Rows(j).Cells(k).FormattedValue.ToString.Trim()
                    End If
                Next
                sw.WriteLine(columnValue)
            Next
            sw.Close()
            myStream.Close()
        Catch e As Exception
            MessageBox.Show(e.ToString())
        Finally
            sw.Close()
            myStream.Close()
        End Try
    End Sub

另外,本机输出用EXCEL打开或notepad打开都OK,
其他机器输出拷贝过来notepad打开也ok,但EXCEL打开内容中文部分显示乱码,是否和EXCEL版本有关系?
--------------------编程问答-------------------- 请教: 通过程序直接输出不带BOM头的编码为UTF8格式的CSV文件一般怎么处理? --------------------编程问答--------------------
引用 12 楼 appleller 的回复:
我用如下功能从DataGridView里输出的CSV文件是否是UTF8格式? 是否是不带BOM头的?
如果不是怎样修改?

[code=VB]New IO.StreamWriter(myStream, System.Text.Encoding.UTF8) '这个带 BOM'
New IO.StreamWriter(myStream) '缺省不带 BOM'[/code' --------------------编程问答--------------------
引用 14 楼 Tiger_Zhao 的回复:
[code=VB]New IO.StreamWriter(myStream, System.Text.Encoding.UTF8) '这个带 BOM'
New IO.StreamWriter(myStream) '缺省不带 BOM'[/code'

New IO.StreamWriter(myStream) '缺省不带 BOM' 这个不带BOM但没有定义UTF8编码,默认保存为什么编码格式?

--------------------编程问答-------------------- 其中换行符定义为CR+LF是怎么在程序里定义的?  --------------------编程问答--------------------
引用 15 楼 appleller 的回复:
New IO.StreamWriter(myStream) '缺省不带 BOM' 这个不带BOM但没有定义UTF8编码,默认保存为什么编码格式?

UTF-8

引用 16 楼 appleller 的回复:
其中换行符定义为CR+LF是怎么在程序里定义的? 

可以通过 NewLine 属性设置。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,