Vb6 从ANSI到CP852/IBM852的文件编码转换

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

我需要使用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 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文件编码?谢谢