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流的方法,而不是二進制訪問寫,沒有任何後垃圾人物。