0

我有一个 MS Doc 文件,我已将它从 Blob 转换为 Base64 编码字符串。它包含一个字符串,如下所示:<z></z>

我为此有base64编码的字符串:<z></z>

但是当我在上面从blob数据转换的字符串中搜索它时,我找不到它!

你能指导我做错了什么:

Blob beforeblob1 = Blob.valueOf(vDovMerge.Merge_Text__c);
    String vDovMergeBlob = EncodingUtil.base64Encode(beforeblob1 );

    String v = EncodingUtil.base64Encode(vDoc.Body);
    system.debug('****v****'+v);
    Blob beforeblob = Blob.valueOf('<z></z>');
    String rep = EncodingUtil.base64Encode(beforeblob );
    system.debug('****rep****'+rep );
    v = v.replace(rep ,vDovMergeBlob );
    system.debug('****v****'+v);
4

1 回答 1

2

Base64 编码将 3 个字节的输入转换为 4 个字节的输出。因此,<z></z>仅在编码时,它肯定会从要编码的块的第一个字节开始。当将其编码为较大数据块的一部分时,它可能最终从要编码的第二个或第三个字节开始,从而产生完全不同的输出 - 这甚至取决于块周围的数据。

示例:假设 ASCII 编码
编码<z></z>导致PHo+PC96Pg==
编码a<z></z>导致YTx6Pjwvej4=
编码aa<z></z>导致YWE8ej48L3o+
编码aaa<z></z>结果YWFhPHo+PC96Pg==再次包含原始编码,因为它从 3 字节边界开始。

因此,搜索 base64 编码数据的唯一方法是将其视为比特流并搜索<z></z>不考虑字节边界的比特模式 - 对我来说听起来不是很有趣:-(

于 2013-10-02T06:36:53.393 回答