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