Function TextBase64Encode(strText, strCharset)
Dim arrBytes
With CreateObject("ADODB.Stream")
.Type = 2 ' adTypeText
.Open
.Charset = strCharset
.WriteText strText
.Position = 0
.Type = 1 ' adTypeBinary
arrBytes = .Read
.Close
End With
With CreateObject("Microsoft.XMLDOM").createElement("tmp")
.DataType = "bin.base64"
.nodeTypedValue = arrBytes
TextBase64Encode = Replace(Replace(.Text, vbCr, ""), vbLf, "")
End With
End Function
Function TextBase64Decode(strBase64, strCharset)
Dim arrBinary
With CreateObject("MSXML2.DOMDocument").createElement("tmp")
.DataType = "bin.base64"
.Text = strBase64
arrBinary = .nodeTypedValue
End With
With CreateObject("ADODB.Stream")
.Type = 1 ' adTypeBinary
.Open
.Write arrBinary
.Position = 0
.Type = 2 ' adTypeText
.Charset = strCharset
TextBase64Decode = .ReadText
.Close
End With
End Function
1 回答
Base64编码的字符串表示在某些字符集中包含特殊字符的初始字符串,适用于此类特殊字符 . 首先,您应该选择使用哪个charset . 通常UTF-8或UTF-16都可以 . 我猜你遇到的问题是由ASCII引起的 .
在下面的示例中,
TextBase64Encode
函数允许将文本编码为Base64,并将TextBase64Decode
解码为文本:为了更清楚,我输入了一个样本,其中包含特殊字符,如单元格
A2
中的德语变音符号,B2
中的字符集ASCII
和C2
中的公式=TextBase64Encode($A$2;B2)
. 现在ASCII表示编码为Base64的字符串将出现在单元格C2
中:在
D2
中输入公式=TextBase64Decode(C2;B2)
以解码Base64:添加了更多字符集,拉伸公式并添加 Headers :
现在您可以看到,UTF-8,UTF-16,UTF-7,Windows-1250,latin1保留了初始样本变音符号,但是ASCII破坏了 . 有关系统已知的字符集名称的列表,请参阅Windows注册表中
HKEY_CLASSES_ROOT\MIME\Database\Charset
的子项 . 注意,UTF-16 LE编码的字符串通常包括开头的字节0xFF,0xFE,它们是Unicode字节顺序标记(BOM),BOM的UTF-8表示是开始时的字节0xEF,0xBB,0xBF . BTW只需将bin.base64
替换为bin.hex
即可使用十六进制值而不是Base64 .