2017-06-18 90 views
0

我使用下面的代码来写,从解码Base64编码字符串的XML文件:从XML文件中删除垃圾字符(可能是BOM) - VBA

'More Code Above 
btArr = MyFoundString 

Set DM = CreateObject("Microsoft.XMLDOM") 
Set EL = DM.createElement("tmp") 
EL.DataType = "bin.base64" 

EL.Text = CStr(btArr) 
decodeBase64 = EL.nodeTypedValue 

XMLFileName = FLDR_NAME & XMLFileNameF 


Open XMLFileName For Binary Access Write As #1 
Put #1, 1, decodeBase64 
Close #1 

该文件被正确地写入,除了12垃圾

Junk Characters

每次它是一个不同的12个字符,但每个创建的文件有他们:(

:出现在文件的开头,从而使XML文件不可用字符

经过研究,我明白这可能是格式编码相关的,并且这些字符可能构成字节顺序标记(BOM)。

如何去除这些字符?

帮助受到高度赞赏。

+0

@ YowE3K谢谢,但这不会真的起作用,因为在这种情况下,'decodeBase64'是写入文件的字节字符串,并且它不是可以从中忽略字符的文本字符串。 – CaptainABC

+0

FWIW - 我刚刚读了base64编码,并用'btArr =“QUJD”'代替了'btArr = MyFoundString'的代码,并正确地将3个字符''ABC''写入文件中(前面没有东西)。所以这似乎暗示你在'MyFoundString'的开头有8个字符,它会在输出文件中生成12个字符。 – YowE3K

+0

糟糕 - 刚刚重读我的最后一条评论 - 应读取16个字符生成12个字符。 (可能是2 x 8字节的字,或1 x 16字节的字,类型信息或尺寸信息?) – YowE3K

回答

0

我想通了。这确实是该文件被写入的方式。

解决的办法是改变以下部分:

Open XMLFileName For Binary Access Write As #1 
Put #1, 1, decodeBase64 
Close #1 

要:

Set BinaryStream = CreateObject("ADODB.Stream") 

BinaryStream.Type = 1 

BinaryStream.Open 
BinaryStream.Write decodeBase64 
BinaryStream.SaveToFile XMLFileName, 2 

这所有的文件被写入正确使用ADODB流的方法,而不是二进制访问写,没有任何后垃圾人物。