38 lines
974 B
VB.net
38 lines
974 B
VB.net
Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
|
|
ByVal CodePage As Long, _
|
|
ByVal dwFlags As Long, _
|
|
ByVal lpMultiByteStr As Long, _
|
|
ByVal cchMultiByte As Long, _
|
|
ByVal lpWideCharStr As Long, _
|
|
ByVal cchWideChar As Long) As Long
|
|
Const CP_UTF8 As Long = 65001
|
|
|
|
Sub Main()
|
|
Dim fn As Integer
|
|
Dim i As Long
|
|
Dim b() As Byte
|
|
Dim s As String
|
|
|
|
fn = FreeFile()
|
|
Open "c:\test.txt" For Binary Access Read As #fn
|
|
ReDim b(0 To (LOF(fn) - 1))
|
|
Get #fn, 1, b()
|
|
|
|
If b(0) = &HFF And b(1) = &HFE Then
|
|
'UTF-16, little-endian
|
|
ReDim b(0 To (LOF(fn) - 3))
|
|
Get #fn, 3, b()
|
|
s = b()
|
|
ElseIf b(0) = &HEF And b(1) = &HBB And b(2) = &HBF Then
|
|
'UTF-8
|
|
i = MultiByteToWideChar(CP_UTF8, 0&, VarPtr(b(3)), LOF(fn) - 3, StrPtr(s), 0)
|
|
s = Space$(i)
|
|
i = MultiByteToWideChar(CP_UTF8, 0&, VarPtr(b(3)), LOF(fn) - 3, StrPtr(s), Len(s))
|
|
Else
|
|
'assume ANSI
|
|
s = StrConv(b(), vbUnicode)
|
|
End If
|
|
Close #fn
|
|
Debug.Print s
|
|
End Sub
|