我在ios开发中遇到了字符串编码的问题。故事如下:
我用中文创建一些值,然后为这些值创建一个 NSDictionary,该字典用作网络请求的参数:
- (void)createActivity
{
NSString *actionTheme = titleF.text;
NSString *actionTitle = biaotiF.text;
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:actionTheme, @"actionTheme", actionTitle, @"actionTitle",nil];
[self networkrequest:];
}
然后对字典做了一些工作:
将字典转换为 JSON 的形式作为 NSString 的类型。
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
对字符串进行编码,因为字符串中有中文单词。
NSString *urlEncodedString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
最后,使用上面的字符串创建了一个完整的 url:
http://app.ic100.com/action/add?paramJson=%7B%22actionTheme%22%3A%22%E6%88%96%E8%80%85%E5%92%8C%E7%94%9F%E6%B4%BB%22%2C%22actionSite%22%3A%22%E5%8E%A (something like this)
我使用第三方“ASIFormDataRequest”进行网络请求,我还设置了StringEncoding:
ASIFormDataRequest *requstHttp = [[ASIFormDataRequest alloc] init];
[requstHttp setStringEncoding:NSUTF8StringEncoding];
....
所有数据都已成功发送到服务器,但是当我从服务器请求这些数据并在 iphone 上显示时。它变成了不可读的文本:
我已经仔细检查了我应该对字符串进行编码或解码的所有地方,并且只使用了 utf8。更重要的是,对于服务器端,也没有使用其他编码。并且我的同事已经测试了从Android平台发送的数据,没有问题。所以我想也许我错过了一些观点。
有什么建议吗?