Vb6 从ANSI到CP852/IBM852的文件编码转换
我需要使用VB6将编码为ANSI的文件转换为IBM852/CP852,以下是我到目前为止所做的工作Vb6 从ANSI到CP852/IBM852的文件编码转换,vb6,Vb6,我需要使用VB6将编码为ANSI的文件转换为IBM852/CP852,以下是我到目前为止所做的工作 Sub ConvertEncoding(ByVal InCharSet, ByVal OutCharSet, ByVal strInFileName As String, Optional strOutFileName As String = vbNullString) Dim objInputStream, objOutputStream As Object If IsChar
Sub ConvertEncoding(ByVal InCharSet, ByVal OutCharSet, ByVal strInFileName As String, Optional strOutFileName As String = vbNullString)
Dim objInputStream, objOutputStream As Object
If IsCharset(InCharSet) And IsCharset(OutCharSet) Then
Set objInputStream = CreateObject("ADODB.Stream")
Set objOutputStream = CreateObject("ADODB.Stream")
With objInputStream
.Open
.Type = adTypeBinary
.LoadFromFile strInFileName
.Type = adTypeText
.Charset = InCharSet
intWritePosition = 0
objOutputStream.Open
objOutputStream.Charset = OutCharSet
Do While .EOS <> True
strText = .ReadText(adReadLine)
objOutputStream.WriteText strText, adWriteChar
Loop
.Close
End With
objOutputStream.SaveToFile IIf(strOutFileName = vbNullString, strInFileName, strOutFileName), adSaveCreateOverWrite
objOutputStream.Close
End If
End Sub
Sub-ConvertEncoding(ByVal-InCharSet、ByVal-OutCharSet、ByVal-strInFileName为字符串、可选strOutFileName为字符串=vbNullString)
Dim objInputStream,OBJOUTPUTSEAM作为对象
如果IsCharset(InCharSet)和IsCharset(OutCharSet),则
设置objInputStream=CreateObject(“ADODB.Stream”)
设置objOutputStream=CreateObject(“ADODB.Stream”)
有一条小溪
打开
.Type=adTypeBinary
.LoadFromFile strInFileName
.Type=adTypeText
.Charset=InCharSet
intWritePosition=0
对象输出流。打开
objOutputStream.Charset=OutCharSet
请稍等,真的吗
strText=.ReadText(adReadLine)
objOutputStream.WriteText strText,adWriteChar
环
.结束
以
objOutputStream.SaveToFile IIf(strOutFileName=vbNullString,strInFileName,strOutFileName),adSaveCreateOverWrite
对象输出流。关闭
如果结束
端接头
当我执行上面的代码时,它能够从PC默认值转换为UTF-8,Unicode,但当我尝试将其转换为IBM852/CP852时,它仍然保持ANSI编码
谁能告诉我它出了什么问题,顺便说一句,代码也是从这里来的,只是修改了它。不知道你期望的是什么。CP862是一个ANSI代码页,所以不知道您的意思是什么,也不知道您试图实现什么。如果您想从其他ANSI代码页转到862,ASCII子集会一对一地传输,但80-FF范围内的任何内容都没有映射。更不用说上面显示的代码中的其他糟糕的编码实践和错误了。为什么迟订?为什么逐行循环以复制数据?您还丢失了“换行符”中断(可能是CRLF,因为您允许默认设置)。为什么愚蠢的
Do-While-True
而不是干净的Do-Until
?@Bob77:在C#或任何花括号语言中没有Do-Until
,也没有Do-While。。。循环
/执行。。。循环While
是一种更具可移植性的构造,即使在抛出了Exit Do
的情况下也是如此。这么晚才开始学习“坏习惯”可能不是个好主意。我同意。应该避免像使用C#这样的坏习惯。那么有谁能帮助我正确地编码,并将unicode文件转换为ibm852文件编码?谢谢