Iphone Base64编码图像的随机行为

Iphone Base64编码图像的随机行为,iphone,encoding,uiimage,Iphone,Encoding,Uiimage,通过使用…将NSData对象转换为NSString对象,使用Base64方案将图像发送到服务器 NSData *imgData=UIImagePNGRepresentation([objCP userImage]); NSString *encodedString=[Base64Coder encodeData:imgData]; 我观察到一个随机行为…有时我在字符串末尾的编码字符串中得到“==”,图像没有上载。字符串之间可能还有一些其他字符。如果我在末尾没有得到这些字符,图像就会上载。

通过使用…将NSData对象转换为NSString对象,使用Base64方案将图像发送到服务器

 NSData *imgData=UIImagePNGRepresentation([objCP userImage]);
 NSString *encodedString=[Base64Coder encodeData:imgData];
我观察到一个随机行为…有时我在字符串末尾的编码字符串中得到“==”,图像没有上载。字符串之间可能还有一些其他字符。如果我在末尾没有得到这些字符,图像就会上载。 为了克服这一点,我还使用此方法将这些字符转换为有效字符(假定接受)::

-(NSString*)urlEncodedVersion:(NSString*)strString
{ 
NSMutableString*strTemp=[[NSMutableString alloc]initWithFormat:@“%@”,strString];
NSArray*escapeChars=[NSArray数组,其对象为:@;“,@”、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、@“、”零];
NSArray*replaceChars=[NSArray阵列及其对象:@“%3B”@“%3F”@“%3A”,
@“%40”、“26”、“3D”、“2B”、“24”、“2C”、“5B”、“5D”、“23”、“21”、“27”、“28”、“29”、“2A”、“20”、“零”;
//NSMutableString*tempStr=[[self-mutableCopy]autorelease];
for(int i=0;i<[escapeChars count];i++)
{
[strTemp replaceAccurrencesofString:[escapeChars objectAtIndex:i]带字符串:[replaceChars objectAtIndex:i]选项:NSLiteralSearch范围:NSMakerRange(0,[strTemp长度]);
} 
返回strTemp;
}
但它也不是在服务

这是我的整个帖子主体::

-(void)uploadProfileInfo:(CreateProfile *)objCP
{

    NSData *imgData=UIImagePNGRepresentation([objCP userImage]);
    NSString *encodedString=[Base64Coder encodeData:imgData];

    NSString *refinedString=[self urlEncodedVersion:encodedString];

    NSString *soapMessage = [NSString stringWithFormat:

                             @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                             "<soapenv:Envelope \n"
                             "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" \n"
                             "xmlns:tem=\"http://tempuri.org/\" \n"
                             "xmlns:wcf=\"http://schemas.datacontract.org/2004/07/NextToMe_BusinessEntity\"> \n"
                             "<soapenv:Header/>\n"
                             "<soapenv:Body>\n"
                             "<tem:CreateProfile>\n"

                             "<tem:objUser>\n"

                             "<wcf:Email>%@</wcf:Email>\n"

                             "<wcf:Mode>%@</wcf:Mode> \n"

                             "<wcf:Name>%@</wcf:Name>\n"

                             "<wcf:ProfileImage>%@</wcf:ProfileImage>\n"

                             "<wcf:RequestDateTime>%@</wcf:RequestDateTime>\n"

                             "<wcf:Status>%@</wcf:Status>\n"

                             "<wcf:StatusSpecified>%@</wcf:StatusSpecified>\n"

                             "<wcf:UDID>%@</wcf:UDID>\n"

                             "</tem:objUser>\n"

                             "</tem:CreateProfile>\n"

                             "</soapenv:Body>\n"

                             "</soapenv:Envelope>\n",[objCP email],[objCP mode],[objCP name],encodedString,@"",[objCP status],[objCP statusSpecified],[objCP UDID]];





    NSURL *url = [NSURL URLWithString:kBaseURL];               
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];             
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];          
    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];       
    [theRequest addValue: @"http://tempuri.org/XXXX/CreateProfile" forHTTPHeaderField:@"Soapaction"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];     
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
        NSLog(@"The Connection is NULL");
    }

}
-(void)uploadProfileInfo:(CreateProfile*)objCP
{
NSData*imgData=UIImagePNGRepresentation([objCP userImage]);
NSString*encodedString=[base64编码器编码数据:imgData];
NSString*refinedString=[self-urlEncodedVersion:encodedString];
NSString*soapMessage=[NSString stringWithFormat:
@“\n”
“\n”
“\n”
“\n”
“\n”
“\n”
“%@\n”
“%@\n”
“%@\n”
“%@\n”
“%@\n”
“%@\n”
“%@\n”
“%@\n”
“\n”
“\n”
“\n”
“\n”,[objCP电子邮件],[objCP模式],[objCP名称],编码字符串,@“,[objCP状态],[objCP状态指定],[objCP UDID];
NSURL*url=[NSURL URLWithString:kBaseURL];
NSMutableURLRequest*theRequest=[NSMutableUrlRequestWithURL:url];
NSString*msgLength=[NSString stringWithFormat:@“%d”,[soapMessage length]];
[theRequest addValue:@“text/xml;charset=utf-8”用于HttpHeaderField:@“Content Type”];
[请求附加值:@”http://tempuri.org/XXXX/CreateProfileforHTTPHeaderField:@“Soapaction”];
[theRequest addValue:msgLength for HttpHeaderField:@“内容长度”];
[TheRequestSetHttpMethod:@“POST”];
[TheRequestSetHttpBody:[soapMessage数据使用编码:NSUTF8StringEncoding];
NSURLConnection*连接=[[NSURLConnection alloc]initWithRequest:theRequest委托:self];
if(连接)
{
webData=[[NSMutableData]保留];
}
其他的
{
NSLog(@“连接为空”);
}
}

您在末尾看到的=字符是填充字符。这是根据3.2。编码数据的填充。另一端应该能够消化。显然,这并没有发生。您应该将该行为与第三方库进行比较,以检查编码或解码是否错误。如果您能够成功删除填充,那么这对您来说很好,但这是解码库中的一个错误。

如果我硬编码包中保存的任何图像,如NSData*imgData=UIImagePNGRepresentation([uiImageName:@“abc.png”]);。。。我从来没有得到这个填充…为什么它是随机的?它不是随机的-它将取决于数据和您的编码算法。
-(void)uploadProfileInfo:(CreateProfile *)objCP
{

    NSData *imgData=UIImagePNGRepresentation([objCP userImage]);
    NSString *encodedString=[Base64Coder encodeData:imgData];

    NSString *refinedString=[self urlEncodedVersion:encodedString];

    NSString *soapMessage = [NSString stringWithFormat:

                             @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
                             "<soapenv:Envelope \n"
                             "xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" \n"
                             "xmlns:tem=\"http://tempuri.org/\" \n"
                             "xmlns:wcf=\"http://schemas.datacontract.org/2004/07/NextToMe_BusinessEntity\"> \n"
                             "<soapenv:Header/>\n"
                             "<soapenv:Body>\n"
                             "<tem:CreateProfile>\n"

                             "<tem:objUser>\n"

                             "<wcf:Email>%@</wcf:Email>\n"

                             "<wcf:Mode>%@</wcf:Mode> \n"

                             "<wcf:Name>%@</wcf:Name>\n"

                             "<wcf:ProfileImage>%@</wcf:ProfileImage>\n"

                             "<wcf:RequestDateTime>%@</wcf:RequestDateTime>\n"

                             "<wcf:Status>%@</wcf:Status>\n"

                             "<wcf:StatusSpecified>%@</wcf:StatusSpecified>\n"

                             "<wcf:UDID>%@</wcf:UDID>\n"

                             "</tem:objUser>\n"

                             "</tem:CreateProfile>\n"

                             "</soapenv:Body>\n"

                             "</soapenv:Envelope>\n",[objCP email],[objCP mode],[objCP name],encodedString,@"",[objCP status],[objCP statusSpecified],[objCP UDID]];





    NSURL *url = [NSURL URLWithString:kBaseURL];               
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];             
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];          
    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];       
    [theRequest addValue: @"http://tempuri.org/XXXX/CreateProfile" forHTTPHeaderField:@"Soapaction"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];     
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {
        NSLog(@"The Connection is NULL");
    }

}