【发布时间】:2011-12-20 13:57:33
【问题描述】:
您好,我正在 vb.net 中创建一个简单的控制台应用程序,以便将文件从任何类型转换为 utf8,但我无法弄清楚这个东西如何与编码一起使用。我知道源文件是 Unicode,但是当我将它转换为新格式时,我得到了垃圾。有什么建议么?我不确定我的代码是否正确
这是我的代码。
Imports System.IO
Imports System.Text
Module Module1
Sub Main()
Console.Write("Please give the filepath (example:c:/tesfile.csv):")
Dim filepath As String = Console.ReadLine()
Dim sEncoding As String = DetermineFileType(filepath)
Dim strContents As String
Dim strEncodedContents As String
Dim objReader As StreamReader
Dim ErrInfo As String
Dim bString As Byte()
Try
'Read the file
objReader = New StreamReader(filepath)
'Read untill the end
strContents = objReader.ReadToEnd()
'Close The file
objReader.Close()
'Write Contents on DOS
Console.WriteLine(strContents)
Console.WriteLine("")
bString = EncodeString(strContents, "UTF-8")
strEncodedContents = System.Text.Encoding.UTF8.GetString(bString)
Dim objWriter As New System.IO.StreamWriter(filepath.Replace(".csv", "_encoded.csv"))
objWriter.WriteLine(strEncodedContents)
objWriter.Close()
Console.WriteLine("Encoding Finished")
Catch Ex As Exception
ErrInfo = Ex.Message
Console.WriteLine(ErrInfo)
End Try
Console.ReadKey()
End Sub
Public Function DetermineFileType(ByVal aFileName As String) As String
Dim sEncoding As String = String.Empty
Dim oSR As New StreamReader(aFileName, True)
oSR.ReadToEnd()
' Add this line to read the file.
sEncoding = oSR.CurrentEncoding.EncodingName
Return sEncoding
End Function
Function EncodeString(ByRef SourceData As String, ByRef CharSet As String) As Byte()
'get a byte pointer To the source data
Dim bSourceData As Byte() = System.Text.Encoding.Unicode.GetBytes(SourceData)
'get destination encoding
Dim OutEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(CharSet)
'Encode the data To destination code page/charset
Return System.Text.Encoding.Convert(OutEncoding, System.Text.Encoding.UTF8, bSourceData)
End Function
End Module
【问题讨论】:
-
Unicode 是规范,而不是编码。您的源文件使用什么编码? UTF-8? UTF-16? UCS2? ...
-
UTF-8 也是 unicode :-) 我接受它然后输入文件是 UTF-16?
-
我现在很困惑:S Unicode 是一种规范。 UTF-8 是编码,但 UTF-8 也是 Unicode :S 我现在把所有东西都混在一起了
-
我有一个 CSV 文件,我用 notepad++ 打开它,然后检查编码并检查“在 UCS-2 little indian 中编码”。我需要这个文件将其转换为 utf-8。问题是,当我在控制台中打印时,一切似乎都很好,但是当我在文件中写入时,它会混淆字符
标签: vb.net console-application