在 Excel VBA 中将特殊字符编码为 Base64

Encoding special chracters to Base64 in Excel VBA

我在 Excel sheet 中有 XML 文本,我想使用 Base64 对其进行编码。我发现了一些实际上做得很好的代码。唯一的问题是我无法在 Excel 中使用 VBA 编码特殊字符,例如德语变音符号。 那么有人知道该怎么做吗?我认为这应该是可能的,因为 PHP base64 函数也可以处理这些字符。

Base64编码的字符串表示在某些charset中包含特殊字符的初始字符串,适用于此类特殊字符。所以首先你应该选择要使用的字符集。通常 UTF-8 或 UTF-16 都可以。我猜你遇到的问题是ASCII引起的。

在下面的示例中,TextBase64Encode 函数允许将文本编码为 Base64 并 TextBase64Decode 将其解码回文本:

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("MSXML2.DOMDocument").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

为了更清楚地说明,我输入了一个示例,其中包含特殊字符,例如单元格 A2 中的德语变音符号、B2 中的字符集 ASCII 和公式 =TextBase64Encode($A;B2)C2。 ASCII 表示编码为 Base64 的字符串出现在单元格 C2:

D2 中输入公式 =TextBase64Decode(C2;B2) 以解码 Base64:

添加了更多字符集,向下扩展了公式并添加了 header:

现在您可以看到,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。顺便说一句,只需将 bin.base64 替换为 bin.hex 即可使用十六进制值而不是 Base64。