2013-10-02 116 views
0

我有一个MS Doc文件,我已经将它从Blob转换为Base64编码的字符串。它包含一个字符串为:<z></z>找不到base64编码sting

而且我base64编码字符串这样:<z></z>

但是,当我从BLOB数据转换,然后上面的字符串搜索它,我无法找到它!

你可以指导我什么,我做错了:使用Base64编码

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); 

回答

2

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>的位模式 - 听起来不像是很有趣对我来说:-(

+0

嗨谢谢,为洞察力..但我怎么能得到blob的for循环,因为Apex销售队伍中没有字节数据类型! – user614946