📄 txtfileencoding.vb
字号:
Imports Microsoft.VisualBasic
Imports System.IO
Imports System.text
'用于取得一个文本文件的编码方式(Encoding)
Public Class TxtFileEncoding
'取得一个文本文件的编码方式。如果无法在文件头部找到有效的前导符,Encoding.Default将被返回。
Public Shared Function GetEncoding(ByVal fileName As String) As Encoding
Return GetEncoding(fileName, System.Text.Encoding.Default)
End Function
' 取得一个文本文件流的编码方式。
Public Shared Function GetEncoding(ByVal stream As FileStream) As Encoding
Return GetEncoding(stream, System.Text.Encoding.Default)
End Function
Public Shared Function GetEncoding(ByVal fileName As String, ByVal defaultEncoding As Encoding) As Encoding
Dim fs As FileStream = New FileStream(fileName, FileMode.Open)
Dim targetEncoding As Encoding = GetEncoding(fs, defaultEncoding)
fs.Close()
fs = Nothing
Return targetEncoding
End Function
Public Shared Function GetEncoding(ByVal stream As FileStream, ByVal defaultEncoding As Encoding) As Encoding
Dim targetEncoding As Encoding = defaultEncoding
If (Not IsNothing(stream) And stream.Length >= 2) Then
'保存文件流的前4个字节
Dim byte1 As Byte = 0
Dim byte2 As Byte = 0
Dim byte3 As Byte = 0
Dim byte4 As Byte = 0
'保存当前Seek位置
Dim origPos As Long = stream.Seek(0, SeekOrigin.Begin)
stream.Seek(0, SeekOrigin.Begin)
Dim nByte As Integer = stream.ReadByte()
byte1 = Convert.ToByte(nByte)
byte2 = Convert.ToByte(stream.ReadByte())
If (stream.Length >= 3) Then
byte3 = Convert.ToByte(stream.ReadByte())
End If
If (stream.Length >= 4) Then
byte4 = Convert.ToByte(stream.ReadByte())
End If
'根据文件流的前4个字节判断Encoding
'Unicode {0xFF(, 0xFE(254)};
'BE-Unicode {0xFE, 0xFF};
'UTF8 = {0xEF, 0xBB, 0xBF};
If (byte1 = 254 And byte2 = 255) Then 'UnicodeBe
targetEncoding = System.Text.Encoding.BigEndianUnicode
End If
If (byte1 = 255 And byte2 = 254 And byte3 <> 255) Then 'Unicode
targetEncoding = System.Text.Encoding.Unicode
End If
If (byte1 = 239 And byte2 = 187 And byte3 = 191) Then 'UTF8
targetEncoding = System.Text.Encoding.UTF8
End If
If (byte1 = 60 And byte2 = 63 And byte3 = 120 And byte4 = 109) Then 'web.config文件编码
targetEncoding = System.Text.Encoding.UTF8
End If
'恢复Seek位置
stream.Seek(origPos, SeekOrigin.Begin)
End If
Return targetEncoding
End Function
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -