包含中文字符的NSString转换为NSURL结果为nil解决方法

本文介绍如何使用stringByAddingPercentEncodingWithAllowedCharacters方法进行URL编码转换。通过具体代码示例展示了如何将包含特殊字符的字符串转化为合法的URL参数。

使用stringByAddingPercentEncodingWithAllowedCharacters转换一下就好了


[objc]  view plain  copy
  1. NSString * str = @"https://www.baidu.com/s?wd=你好";  
  2. NSURL * url = [NSURL URLWithString:[str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]];  
在解析JSON报文前自动检测并移除其中控制字符有多种方法,以下是不同编程语言的实现示例: #### Python ```python import re def remove_control_chars(s): control_chars = ''.join(map(chr, list(range(0, 32)) + list(range(127, 160)))) control_char_re = re.compile('[%s]' % re.escape(control_chars)) return control_char_re.sub('', s) original_json = '{"key": "value\x00more"}' cleaned_json = remove_control_chars(original_json) import json data = json.loads(cleaned_json) print(data) ``` 此方法通过正则表达式匹配并移除所有控制字符,范围是ASCII码从0到31以及127到159的字符,以确保JSON字符串中不包含非法控制字符[^2]。 #### JavaScript ```javascript let text = '{"fail_station": "FSW_WELDING_DRY_2\r\n","fail_resourceid": "200118223\r\n","fail_timestamp": "2022-12-17"}'; text = text.replace(/[\r|\n|\t]/g, ""); const data = JSON.parse(text); console.log(data); ``` 该方法使用`replace`函数正则表达式,将JSON字符串中的回车符(`\r`)、换行符(`\n`)制表符(`\t`)替换为空字符串,从而移除这些控制字符,之后再进行JSON解析[^1]。 #### Objective - C ```objc -(NSString *)removeUnescapedCharacter:(NSString *)inputStr { NSCharacterSet *controlChars = [NSCharacterSet controlCharacterSet]; NSRange range = [inputStr rangeOfCharacterFromSet:controlChars]; if (range.location != NSNotFound) { NSMutableString *mutable = [NSMutableString stringWithString:inputStr]; while (range.location != NSNotFound) { [mutable deleteCharactersInRange:range]; range = [mutable rangeOfCharacterFromSet:controlChars]; } return mutable; } return inputStr; } NSString *output = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"yourUrlString"] encoding:NSUTF8StringEncoding error:nil]; output = [self removeUnescapedCharacter:output]; NSError *error; NSData *jsonData = [output dataUsingEncoding:NSUTF8StringEncoding]; id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; if (error) { NSLog(@"JSON解析错误: %@", error); } else { NSLog(@"解析成功: %@", jsonObject); } ``` 这个Objective - C方法定义了一个`removeUnescapedCharacter`函数,它通过`NSCharacterSet`来检测控制字符,使用`NSRange`定位这些字符并从字符串中删除,最后进行JSON解析。如果解析过程中出现错误,会打印错误信息;若解析成功,则打印解析后的对象[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值