Objective c 使用多种语言对基本授权标头进行base 64编码

Objective c 使用多种语言对基本授权标头进行base 64编码,objective-c,base64,basic-authentication,multilingual,Objective C,Base64,Basic Authentication,Multilingual,我试图从一个ios应用程序登录到Jira实例,但我遇到了一些问题,即基本64编码授权头的用户名包含字符“ñ”、“ó”等 从字符串中取出数据时,我使用NSISOLatin1StringEncoding解决了这个问题。但这不适用于其他用户,如俄罗斯用户等 那么,无论用户名是哪种语言,我如何从user:password获得正确的base 64编码字符串 这是我正在使用的代码 -(NSString *) baseEncode{ NSString *username = @"привет"; NSStr

我试图从一个ios应用程序登录到Jira实例,但我遇到了一些问题,即基本64编码授权头的用户名包含字符“ñ”、“ó”等

从字符串中取出数据时,我使用NSISOLatin1StringEncoding解决了这个问题。但这不适用于其他用户,如俄罗斯用户等

那么,无论用户名是哪种语言,我如何从user:password获得正确的base 64编码字符串

这是我正在使用的代码

-(NSString *) baseEncode{

NSString *username = @"привет";
NSString *password = @"123привет";

NSString *basic = [NSString stringWithFormat:@"%@:%@", username, password];
NSString *string = @"";

//this way works, but not with russian users
NSData *data = [basic dataUsingEncoding:NSISOLatin1StringEncoding];

//if i use this line instead it won't work with latin users with 'ñ', 'ó', etc on their username
//NSData *data = [basic dataUsingEncoding:NSUTF8StringEncoding];


if (data != nil) {
    if ([data respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {
        string = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];  // iOS 7+
    } else {
        if ([data respondsToSelector:@selector(base64Encoding)]) {
            string = [data performSelector:@selector(base64Encoding)];  // pre iOS7
        }
    }
}

NSLog(@"encode result : %@", string);
return string;

}

-(void) doRequest{

NSURL *url = [NSURL URLWithString:[@"http://url_to_jira_rest_api" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSString *login = [self baseEncode];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

[request setValue:[NSString stringWithFormat:@"Basic %@", login] forHTTPHeaderField:@"Authorization"];

[request setHTTPMethod:@"GET"];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[queue setSuspended:NO];

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData * data, NSError *error) {
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
    long statusCode = 0;

    statusCode = [httpResponse statusCode];

    NSString* newStr = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];

    NSLog(@"%@",newStr);

    NSLog(@"%@",[error description]);

}];
}
这是服务器响应

Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)"

看见享受实现的乐趣。您需要了解Jira网站期望的编码。UTF-8是支持所有字符的最佳选择,但网站需要使用UTF-8。它需要一种不同的编码,例如ISO拉丁语-1,那么您只能支持该编码支持的字符。@rmaddy我已经用拉丁语和utf8编码过了,效果很好。我认为这不是服务器问题。我会找出答案并把它贴在这里。