Unicode转UTF-8

8
我将使用VBScript从DB2中提取数据并写入文件。 写入文件的方式如下:
Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True)

这段文字创建了一个unicode文件,但是它是一个xml文件并且使用UTF-8。当我用MS XML Notepad打开xml文件时,它会报错:“十六进制值0x00是无效字符”。

因此,我用TextPad打开这个文本文件并保存为UTF-8。之后XML就可以正常打开了。我能否通过vbScript将文件从Unicode转换为UTF-8?


1
unicode 在 vbscript 中是什么意思?它实际使用的编码是什么? - Niki Yoshiuchi
1
VBScript 可能默认使用 UTF-16 编码来写入文件。在西方文本中,UTF-16 将会有许多 0x00 作为高位字节。不想太过迂腐,但是 UTF-8 就是 Unicode;它是一种特定的 Unicode 编码方案。 - DaveE
下面的两个答案有没有帮到您?:-) - stealthyninja
1
@DaveE 我只是在学习这个主题,但这位博主认为你是非常错误的。http://enjoydoingitwrong.wordpress.com/2009/06/22/unicode-is-not-utf/ - Stephanie Page
1
@StephaniePage - 你说得对,UTF-x并不是整个Unicode标准。它们是用特定的字节编码序列来表示Unicode字符以满足某些兼容性或存储目标的正确Unicode转换。UTF-8是一种特定的转换,旨在与现有的ASCII编码文档兼容。 - DaveE
2个回答

16

使用Stream对象并以utf-8字符集保存文件可能会更好,以下是一个简单的.vbs函数,您可以在数据上进行测试:

Option Explicit

Sub Save2File (sText, sFile)
    Dim oStream
    Set oStream = CreateObject("ADODB.Stream")
    With oStream
        .Open
        .CharSet = "utf-8"
        .WriteText sText
        .SaveToFile sFile, 2
    End With
    Set oStream = Nothing
End Sub

' Example usage: '
Save2File "The data I want in utf-8", "c:\test.txt"

-2

在某些情况下,我们需要在没有ADO的机器上使用WSH来完成这项工作。在这种情况下,请记住WSH不会以UTF-8格式创建文件(CreateTextFile方法无法使用UTF-8),但完全可以操作UTF-8文件(追加数据)。考虑到这一点,我找到了一个非正统的解决方案。按照以下步骤进行:

1)打开一个空白的记事本,单击“文件”>“另存为”,键入文件名(例如UTF8FileFormat.txt),将“编码”字段更改为UTF-8,然后单击“保存”。离开记事本。

2)在您的WSH中,您将使用UTF8FileFormat.txt来创建您的UTF8文本文件。为此,在FileSystemObject声明之后,使用CopyFile方法将UTF8FileFormat.txt复制到新文件(记得使用Overwrite选项),然后使用OpenTextFile方法以ForAppending和NoCreate选项打开您的新文件。之后,您就可以像使用CreateTextFile方法一样正常地写入此文件。您的新文件将以UTF-8格式保存。以下是一个示例:

'### START
'  ### REMEMBER: You need to create the UTF8FileFormat.txt file in a blank
'  ###           NOTEPAD with UTF-8 Encoding first.
   Unicode=-1 : ForAppending=8 : NoCreate=False : Overwrite=True
   set fs = CreateObject("Scripting.FileSystemObject")
   fs.CopyFile "UTF8FileFormat.txt","MyNewUTF8File.txt",Overwrite
   set UTF8 = fs.OpenTextFile("MyNewUTF8File.txt", ForAppending, NoCreate)
   UTF8.writeline "My data can be writed in UTF-8 format now"
   UTF8.close
   set UTF8 = nothing
'### END

1
这只是彻头彻尾的无稽之谈/危险的错误信息。在单字节ANSI编码的字符串前添加BOM并不能神奇地将其转换为UTF-8。 - Ekkehard.Horner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接