ios - + 符号在 iOS 中转换为空格 如何避免?
问题描述
我需要将字符串保存在服务器中作为用户输入。
即ABCD[]{}#%^*+=
服务器日志 = "密码":"[]{}#%^* = " (+ 符号替换为空格)
我的代码
// 创建可变请求
NSString *strHeaderField_ApplicationJson = @"application/json";
NSString *strParameter = @"userId=test@gmail.com&password=[]{}#%^*+=**";
NSData *parameterData = [strParameter dataUsingEncoding:NSASCIIStringEncoding
allowLossyConversion:YES];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlEdit cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:timeInterval];
[request addValue:strHeaderField_ApplicationJson forHTTPHeaderField:@"Contect-Type"];
[request addValue:strHeaderField_ApplicationJson forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:HTTPMethodPost];
[request setHTTPBody:parameterData];```
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable connectionError) {
[[Singleton sharedManager] hideHUD];
if (data.length > 0) {
NSError *error;
NSDictionary *responceDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
if (error) {
[[Singleton sharedManager] showAlertTitle:MsgTitleError withMessage:MsgErrorOccured onView:self];
}
else {
NSLog(@"responceDict : %@",responceDict);
if ([responceDict valueForKey:@"status"]) {
BOOL status = [[responceDict valueForKey:@"status"] boolValue];
if (status) {
dispatch_async(dispatch_get_main_queue(), ^{
for (UIViewController *vc in self.navigationController.viewControllers) {
if ([vc isKindOfClass:[MyVehicleViewController class]]) {
[self.navigationController popToViewController:vc animated:true];
break;
}
}
[self.navigationController popViewControllerAnimated:true];
});
}
else {
[[Singleton sharedManager] showAlertTitle:MsgTitleError withMessage:[responceDict valueForKey:@"message"] onView:self];
}
}
else {
[[Singleton sharedManager] showAlertTitle:MsgTitleError withMessage:[responceDict valueForKey:@"message"] onView:self];
}
}
}
else {
[[Singleton sharedManager] showAlertTitle:MsgTitleError withMessage:MsgConnectionErrorOccured onView:self];
}
[[Singleton sharedManager] hideHUD];
}];
[postDataTask resume];
解决方案
NSString *password = @"34^+=-";
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString: @"!*'();:@&=+$,/?%#[] "] invertedSet];
NSString *encodedPassword = [password stringByAddingPercentEncodingWithAllowedCharacters: set];
NSData *parameterData = [encodedPassword dataUsingEncoding: NSASCIIStringEncoding allowLossyConversion: YES];
推荐阅读
- azure - 如何连接到 Azure Ubuntu VM 中 Docker 上托管的 SQL Server
- c - 为什么这个函数会产生这么多子进程?
- c# - ZipArchive 提取下载到文件或流之间的区别
- c# - 从图像框中删除一个矩形
- python - XlsxWriter 从特定单元格开始写入数据帧
- hibernate - POSTMAN @GET Couldn't get any response and Swagger @GET 请求已终止
- c++ - 如何使用代码创建 C++ MDI mfc 子窗口?
- vue.js - 更新vuex中的数组在组件中没有反应
- android - 为什么 ArrayAdapter 的布局文件必须设置两次?
- c# - 从对象列表中打印组件不起作用