找不到base64编码的字符串

时间:2013-10-02 04:34:04

标签: character-encoding salesforce apex-code

我有一个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);

1 个答案:

答案 0 :(得分: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>的比特模式 - 听起来不像对我很有趣: - (