Unicode到UTF-8

Unicode到UTF-8,unicode,vbscript,utf-8,character-encoding,Unicode,Vbscript,Utf 8,Character Encoding,我使用vbscript从db2中提取数据并写入文件。 写入文件,如: Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True) 它以unicode创建文件。但这是xml文件,它使用UTF-8。 因此,当我使用MS xml记事本打开xml文件时,它会抛出错误: '十六进制值0x00是无效字符' 所以我用TextPad打开这个文本文件并保存在UTF-8中。之后,XML将毫无问题地打开。 我可以用vbScript将文件从Unicod

我使用vbscript从db2中提取数据并写入文件。 写入文件,如:

Set objTextFile = objFSO.CreateTextFile(sFilePath, True, True)
它以unicode创建文件。但这是xml文件,它使用UTF-8。 因此,当我使用MS xml记事本打开xml文件时,它会抛出错误: '十六进制值0x00是无效字符'

所以我用TextPad打开这个文本文件并保存在UTF-8中。之后,XML将毫无问题地打开。
我可以用vbScript将文件从Unicode转换为UTF-8吗?

使用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"

嗯,在某些情况下,我们需要在WSH中的机器上毫不费事地执行此操作。在这种情况下,请记住WSH不会创建UTF-8格式的文件(CreateTextFile方法不适用于UTF-8),但完全可以操作UTF-8文件(附加数据)。考虑到这一点,我找到了一种非正畸的解决方案。按照以下步骤操作:

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

2) 在WSH中,您将使用UTF8FileFormat.txt创建UTF8文本文件。为此,在FileSystemObject声明之后,使用CopyFile方法将UTF8FileFormat.txt复制到一个新文件(请记住使用覆盖选项),然后使用OpenTextFile方法以ForAppend和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

在vbscript中,
unicode
是什么意思?它实际使用的是什么编码?vbscript可能是在默认情况下以UTF-16编码编写文件。UTF-16中的0x00将作为西文文本中的高阶字节。而且,不是为了迂腐,而是UTF-8是Unicode;这是一种特殊的Unicode编码方案。下面两个答案中的任何一个对您有用吗?:-)@DaveE我只是在学习这个话题,但这位博主认为你大错特错了@StephaniePage-你说得对,UTF-x不是整个Unicode标准。它们是正确的Unicode转换,用于使用特定字节编码序列表示Unicode字符,以满足某些兼容性或存储目标。UTF-8是一种特殊的转换,旨在与现有的ASCII编码文档体兼容。这完全是胡说八道/危险的错误信息。将BOM表前置为单字节ANSI编码字符串不会神奇地将其转换为UTF-8。