我从中获取数据的一些站点返回UTF-8字符串,其中UTF-8字符被转义,即: \u5404\u500b\u90fd
是否有内置的可可功能可能有助于此,或者我必须编写自己的解码算法.
目前我正在编写一个应用程序(目标iOS 6,启用了ARC),它使用JSON进行数据传输,使用Core Data进行持久存储.JSON数据由PHP脚本通过json_encode从MySQL数据库生成.
我的问题是,对于某些表中的数据,以下代码失败:
- (NSDictionary *)executeFetch:(NSString *)query
{
NSURL *requesturl = [NSURL URLWithString:[query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSError *dataError = nil;
self.jsonData = [NSData dataWithContentsOfURL:requesturl options:kNilOptions error:&dataError];
NSError *error = nil;
self.jsonSerializationResult = [NSJSONSerialization JSONObjectWithData:self.jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error];
return self.jsonSerializationResult;
}
Run Code Online (Sandbox Code Playgroud)
该程序总是在EXC_BAD_ACCESS错误的位置崩溃,它表示self.jsonSerializationResult和Instruments说有一个Zombie被检测到.我知道这意味着我发送消息的一些对象是零,但我无法找到如何解决它...这就是乐器所说的:
# Address Category Event Type RefCt Timestamp Size Responsible Library Responsible Caller
0 0xa1b8a70 CFString (mutable) Malloc 1 00:01.603.081 32 Foundation -[NSPlaceholderMutableString initWithBytesNoCopy:length:encoding:freeWhenDone:]
1 0xa1b8a70 CFString (mutable) Release 0 00:01.603.137 0 Foundation newJSONValue
2 0xa1b8a70 CFString (mutable) Zombie -1 00:01.603.259 0 …Run Code Online (Sandbox Code Playgroud) 我有一个字符串"Artîsté".我在PHP上使用json_encode,然后得到"Art\u00eest\u00e9".
如何将其转换为NSString?我尝试了很多东西而且没有一个能够工作我总是得到Artîsté
For Example:
NSString stringWithUTF8String:"Art\u00c3\u00aest\u00c3\u00a9"];//Artîsté
@"Art\u00c3\u00aest\u00c3\u00a9"; //Artîsté
Run Code Online (Sandbox Code Playgroud) 所以这是一个问题.
我有一个字符串
????? ????-0.fb2
Run Code Online (Sandbox Code Playgroud)
NSString方法长度返回16
在Core Data中保存字符串后(后端--sqlite)
NSString方法的长度返回17,但在视觉上字符串保持不变
????? ????-0.fb2
Run Code Online (Sandbox Code Playgroud)
显然方法是isEqualToString:返回NO
花了很多时间在实验中,我很遗憾这个问题是这封信:
?
Run Code Online (Sandbox Code Playgroud)
删除此信解决问题.
但它让我疯狂,为什么会发生这样的事情?
这里的解决方法有效,但不满足我:
以及dosnt工作的解决方法:
在Core Data中保存后,请帮助我了解字符串发生了什么.
还有更优雅的解决方案吗?
NSSet *subFolders = [_account subscribedFolders];
NSLog(@"subFolders: %@",subFolders);
Run Code Online (Sandbox Code Playgroud)
输出:
...
"[Gmail]/\U05d8\U05d9\U05d5\U05d8\U05d5\U05ea",
"[Gmail]/\U05d7\U05e9\U05d5\U05d1"
...
Run Code Online (Sandbox Code Playgroud)
有什么方法可以用原始语言(希伯来语)显示上述文字吗?
我试过的事情:
谢谢
objective-c ×4
cocoa ×2
unicode ×2
xcode ×2
cocoa-touch ×1
core-data ×1
ios ×1
ios6 ×1
json ×1
nsstring ×1