1. 服務(wù)器返回的是GBK編碼的字符串 iOS端以UTF-8的字符串展示到Label上
NSStringEncoding enc =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData * data = [@"GBK編碼的字符串" dataUsingEncoding:enc];
NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
label.text = str;
2.iOS端 將GBK編碼的字符串傳給服務(wù)器
- 一開(kāi)始在這一點(diǎn)上 是方向搞錯(cuò)了 導(dǎo)致做了很多無(wú)用功
方向錯(cuò)在:
因?yàn)閕OS端的參數(shù) 比如姓名 學(xué)校名稱(chēng) 都是中文 把這些值 以參數(shù)的形式傳給后臺(tái) 想著把這些值
轉(zhuǎn)為GBK編碼的字符串發(fā)給服務(wù)器就好了
于是開(kāi)始了下面的搜索??谷歌?百度
一搜 結(jié)果還真不少
-
第一 .Snip20180513_1.png
不得不說(shuō)很多地方千篇一律
第二.很多博客說(shuō)的邏輯感覺(jué)沒(méi)問(wèn)題 比如
NSString*aString =@"這是一個(gè)測(cè)試string轉(zhuǎn)GBK發(fā)送的字符串";
NSStringEncoding gbkEncoding=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData*aData = [aString dataUsingEncoding: gbkEncoding];
NSString*base64String = [aData base64EncodedStringWithOptions:0];
parameters[@"printcontent"] = [NSString stringWithFormat:@"T:%@",base64String];
[self.mgrPOST:followURL parameters:parameters progress:nil success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {
NSLog(@"%@",responseObject);
}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
NSLog(@"err : %@",error);
}];
這樣往服務(wù)器端發(fā)送的數(shù)據(jù)就是gbk編碼的了,數(shù)據(jù)庫(kù)中寫(xiě)入的也是中文了挺峡,也能正確匹配中文了棍弄。
但是對(duì)我來(lái)說(shuō) 卻行不通
-
第三.根據(jù)以上兩條 我給NSString添加了一個(gè)類(lèi)別 用于將Xcode默認(rèn)的utf-8的字符串轉(zhuǎn)換成GBK編碼的字符串Snip20180513_2.png
到目前 也沒(méi)整明白 上面那么轉(zhuǎn)換 為什么不成功 比如傳入@"1班"或者@"開(kāi)發(fā)區(qū)"等轉(zhuǎn)完結(jié)果為nil 當(dāng)傳入某些中文值時(shí) 又能有轉(zhuǎn)完的結(jié)果
-
第四.在Github上找找吧Snip20180513_3.png
無(wú)奈 也不行
三.最終 轉(zhuǎn)換了思路 想到AFN對(duì)這塊有無(wú)設(shè)置 一搜索 還真有
- 第一. 直接了當(dāng)想到的就是一下這種設(shè)置 但是 并不行
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
manager.responseSerializer.stringEncoding = gbkEncoding;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/json"];
[manager POST:TTBaseURL parameters:dictionary
success:^(AFHTTPRequestOperation *operation,id responseObject) {
if (succes) {
succes(responseObject);
}
}failure:^(AFHTTPRequestOperation *operation,NSError *error) {
if (fail) {
fail(error);
}
}];
四.經(jīng)過(guò)以上的這些探索 無(wú)果后 通過(guò)如下方式終于OK了<啰嗦這么多 把整個(gè)問(wèn)題的所有探索過(guò)程記錄一下 方向很重要!!!>
NSString * urlStr = @"https://xxxxxxxxxxxxxx";
NSString * body = [NSString stringWithFormat:@"number=%@&selectcity=%@",assistNum,city];
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
[urlRequest setHTTPMethod: @"POST"];
[urlRequest setHTTPBody:[body dataUsingEncoding:enc]];
[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
AFHTTPSessionManager *mgr8 = [AFHTTPSessionManager manager];
mgr8.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"text/json",@"text/plain",@"text/text",@"text/javascript",nil];
mgr8.requestSerializer = [AFHTTPRequestSerializer serializer];
mgr8.responseSerializer = [AFHTTPResponseSerializer serializer];
NSURLSessionDataTask *dataTask = [mgr8 dataTaskWithRequest:urlRequest completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
//處理成功之后的邏輯
}];
[dataTask resume];