关于VB保存UTF-8格式文本文件的有关问题
关于VB保存UTF-8格式文本文件的问题。
源代码如下:
Private Sub Command2_Click()
Open "D:\ansoft\yang\script1.vbs" For Input As #1
Do While Not EOF(1)
Line Input #1, strtxt
If InStr(strtxt, "磁芯外半径") Then
strtxt = Replace(strtxt, "磁芯外半径", Text1.Text)
End If
s = s & strtxt & vbCrLf
Loop
Close #1
Open "D:\ansoft\yang\script1.vbs" For Output As #1
Print #1, s;
Close #1
End Sub
这个代码写入的数据最后保存的都是Unicode格式,对于中文字显示的都是乱码,需要添加什么代码,能够让中文字正确显示吗?希望各位高手们能帮我想想办法,给出能够解决的程序代码。
------解决思路----------------------
读写文件的方式有很多种.....................
给你一个参考书的例子,你自己琢磨一下修改成自己的即可。
写文件时,如果新内容比原来的短,原来文件多余的部分并不会被删除,虽然不影响读取,但是会影响文件的体积,
所以,如果介意这点,写文件之前如果存在则删除.......
------解决思路----------------------
有2个api函数可以在utf8和byte之间进行转换:widechartomultibyte / multibytetowidechar
如果需要,将上面函数和过程稍加修改就可以满足你的要求.....
------解决思路----------------------
****的搜索就是渣,以前的帖子又找不着了,再贴一遍方法。
------解决思路----------------------
来问问题,却不把问题说清楚,你让别人怎么去解决???
本来是很简单的问题,偏偏搞得非常诡异!
5F赵老虎给出了一个解决方案。另外一个方法就是用API 进行编码转换:
MultiByteToWideChar( ) 和WideCharToMultiByte( )
如果文件不是非常大(上百MB),可以用Binary模式一次性读入内存进行处理。
太大的文件,就最好分段读取来处理。
不过以现在多数的电脑配置,基本上1G以内的文件一次性全部读取也不算什么。
源代码如下:
Private Sub Command2_Click()
Open "D:\ansoft\yang\script1.vbs" For Input As #1
Do While Not EOF(1)
Line Input #1, strtxt
If InStr(strtxt, "磁芯外半径") Then
strtxt = Replace(strtxt, "磁芯外半径", Text1.Text)
End If
s = s & strtxt & vbCrLf
Loop
Close #1
Open "D:\ansoft\yang\script1.vbs" For Output As #1
Print #1, s;
Close #1
End Sub
这个代码写入的数据最后保存的都是Unicode格式,对于中文字显示的都是乱码,需要添加什么代码,能够让中文字正确显示吗?希望各位高手们能帮我想想办法,给出能够解决的程序代码。
------解决思路----------------------
读写文件的方式有很多种.....................
给你一个参考书的例子,你自己琢磨一下修改成自己的即可。
Function ReadBinaryText(ByVal bFile As String) As String
''读文本文件
On Error GoTo 100
Dim iNum As Integer, v As Variant
iNum = FreeFile()
Open bFile For Binary As #iNum
Get #iNum, 1, v
Close #iNum
ReadBinaryText = v
Exit Function
100:
MsgBox Err.Description
End Function
Sub SaveTextFile(ByVal bFile As String, ByVal bValue As String)
''写文本文件
On Error GoTo 100
Dim iNum As Integer, v As Variant, Byt() As Byte
iNum = FreeFile()
Open bFile For Binary As #iNum
Byt = bValue
v = Byt
Put #iNum, 1, v
Close #iNum
Exit Sub
100:
MsgBox Err.Description
End Sub
写文件时,如果新内容比原来的短,原来文件多余的部分并不会被删除,虽然不影响读取,但是会影响文件的体积,
所以,如果介意这点,写文件之前如果存在则删除.......
------解决思路----------------------
有2个api函数可以在utf8和byte之间进行转换:widechartomultibyte / multibytetowidechar
如果需要,将上面函数和过程稍加修改就可以满足你的要求.....
------解决思路----------------------
****的搜索就是渣,以前的帖子又找不着了,再贴一遍方法。
'工程要引用 Microsoft ActiveX Data Objects 2.5,下面两个通用方法建议放在模块中。'
Sub SaveUTF8(ByVal Text As String, ByVal FileName As String)
Dim oStream As ADODB.Stream
Set oStream = New ADODB.Stream
oStream.Open
oStream.Charset = "UTF-8"
oStream.Type = adTypeText
oStream.WriteText Text
oStream.SaveToFile FileName, adSaveCreateOverWrite
oStream.Close
End Sub
Function LoadUTF8(ByVal FileName As String) As String
Dim oStream As ADODB.Stream
Set oStream = New ADODB.Stream
oStream.Open
oStream.Charset = "UTF-8"
oStream.LoadFromFile FileName
LoadUTF8 = oStream.ReadText()
oStream.Close
End Function
'调用很简单'
Private Sub Command2_Click()
Dim s As String
s = LoadUTF8("D:\ansoft\yang\script1.vbs")
s = Replace(s, "磁芯外半径", Text1.Text)
SaveUTF8 s, "D:\ansoft\yang\script1.vbs"
End Sub
------解决思路----------------------
来问问题,却不把问题说清楚,你让别人怎么去解决???
本来是很简单的问题,偏偏搞得非常诡异!
5F赵老虎给出了一个解决方案。另外一个方法就是用API 进行编码转换:
MultiByteToWideChar( ) 和WideCharToMultiByte( )
如果文件不是非常大(上百MB),可以用Binary模式一次性读入内存进行处理。
太大的文件,就最好分段读取来处理。
不过以现在多数的电脑配置,基本上1G以内的文件一次性全部读取也不算什么。