我可以在没有BOM的情况下使用UTF-8导出Excel数据吗?

P-P*_*P-P 23 vbscript excel utf-8

我通过Excel宏(VBScript)导出Microsoft Excel数据.因为文件是lua脚本,我将其导出为UTF-8.我在Excel中制作UTF-8的唯一方法是使用像这样的adodb.stream

set fileLua = CreateObject("adodb.stream")
fileLua.Type = 2
fileLua.Mode = 3
fileLua.Charset = "UTF-8"
fileLua.Open
fileLua.WriteText("test")
fileLua.SaveToFile("Test.lua")
fileLua.flush
fileLua.Close
Run Code Online (Sandbox Code Playgroud)

我想从Test.lua中消除BOM,但我不知道如何.(因为Test.lua有一些unicode文本,我必须使用UTF-8格式.)

你知道如何在excel文件中制作没有BOM的UTF-8文件吗?提前致谢.

use*_*735 34

我也有同样的问题:必须将数据从Excel(Office 2003,VBA6.5)导出到UTF-8编码文件.从您的问题中找到答案!在我的示例下面,我还使用boost(感谢!)答案中的技巧#2去除BOM.我没有#1工作,从未尝试过#3.

Sub WriteUTF8WithoutBOM()
    Dim UTFStream As Object
    Set UTFStream = CreateObject("adodb.stream")
    UTFStream.Type = adTypeText
    UTFStream.Mode = adModeReadWrite
    UTFStream.Charset = "UTF-8"
    UTFStream.LineSeparator = adLF
    UTFStream.Open
    UTFStream.WriteText "This is an unicode/UTF-8 test.", adWriteLine
    UTFStream.WriteText "First set of special characters: öäåñüûú€", adWriteLine
    UTFStream.WriteText "Second set of special characters: qwertzuiopõúasdfghjkléáûyxcvbnm\|Ä€Í÷×äðÐ[]í³£;?¤>#&@{}<;>*~¡^¢°²`ÿ´½¨¸0", adWriteLine

    UTFStream.Position = 3 'skip BOM

    Dim BinaryStream As Object
    Set BinaryStream = CreateObject("adodb.stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Mode = adModeReadWrite
    BinaryStream.Open

    'Strips BOM (first 3 bytes)
    UTFStream.CopyTo BinaryStream

    'UTFStream.SaveToFile "d:\adodb-stream1.txt", adSaveCreateOverWrite
    UTFStream.Flush
    UTFStream.Close

    BinaryStream.SaveToFile "d:\adodb-stream2.txt", adSaveCreateOverWrite
    BinaryStream.Flush
    BinaryStream.Close
End Sub
Run Code Online (Sandbox Code Playgroud)

我使用的ADO Stream Object引用.


Phi*_*bbs 9

如果其他人正在努力使用adTypeText常量,则需要在Tools-> References下包含"Microsoft ActiveX Data Objects 2.5 Object Library".


bug*_*net 7

一些可能性:

  1. 将文本作为UTF-8,Type = 2放入缓冲区,但是然后设置Type = 1(作为二进制)并将其写出.这可能会说服ADODB.Stream跳过添加BOM.

  2. 创建另一个缓冲区,类型为binary,并使用CopyTo将数据从BOM后的某个点复制到该缓冲区.

  3. 使用Scripting.FileSystemObject再次读取文件,修剪BOM,再次写出

  • (2)'作品'(证据:http://stackoverflow.com/a/31436631/603855); (1)**不**; (3)**可能**'工作'但风险很大(http://blogs.msdn.com/b/ericlippert/archive/2005/04/20/binary-files-and-the-file-system-object -do-not-mix.aspx)并且效率不高. (2认同)