【问题标题】:NSJSONSerialization not working with emoji [duplicate]NSJSONSerialization 不适用于表情符号 [重复]
【发布时间】:2017-06-24 06:31:37
【问题描述】:

我想从中获得价值。

字符串

"[{\"VisitorId\":\"dbd1c1d6-8348-4674-9e48-65137bdc5c14\",\"OperatorID\":null,\"VisitorSignalId\":\"6c454fc2-cf74-4010-aecd- 93d93408ad24\",\"类型\":\"访客\",\"消息文本\":\"kssksksksksk 已加入聊天!\",\"IsJoin\":true,\"MessageTime\":\"2017-02-07 05:10:28\",\"File\":null,\"MessageType\":\"JoinMessage\",\"Name\":\"ksksksksksk\",\"Email\":\"skdsm@ fdg.com\",\"IP\":\"123.231.110.188\",\"页面\":\"http://www.sathyabaman.com/\",\"评级\":\"无评级\",\"图片\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\":null,\"OperatorCount\":1,\"RequestTranscript\":false,\"Country\" :null,\"OS\":null,\"Broswer\":null,\"Mobile\":null,\"iso_code\":null},{\"VisitorId\":\"dbd1c1d6-8348-4674 -9e48-65137bdc5c14\",\"OperatorID\":null,\"VisitorSignalId\":null,\"Type\":\"Visitor\",\"Messagetext\":\"lkkhnl\",\"IsJoin \":false,\"消息时间\":\"2017-02-07 05:10:58\",\"File\":null,\"MessageType\":\"NormalMessage\",\"Name\":\"ksksksksksk\",\"Email\":\"skdsm@ fdg.com\",\"IP\":\"123.231.110.188\",\"页面\":\"http://www.sathyabaman.com/\",\"评级\":\"无评级\",\"图片\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\":null,\"OperatorCount\":1,\"RequestTranscript\":false,\"Country\" :null,\"OS\":null,\"Broswer\":null,\"Mobile\":null,\"iso_code\":null},{\"VisitorId\":null,\"OperatorID\" :\"81aebba9-ddc3-4f58-b1af-ac912d23a41e\",\"VisitorSignalId\":null,\"Type\":\"Operator\",\"Messagetext\":\"如何 我今天能帮你吗?\",\"IsJoin\":false,\"MessageTime\":\"2017-02-07 10:41:11\",\"File\":null,\"MessageType\":\"NormalMessage\",\"Name\":\"sathya\",\"Email\":null,\" IP\":null,\"Page\":null,\"Rating\":null,\"Image\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\ ":\"sathya\",\"OperatorCount\":1,\"RequestTranscript\":null,\"Country\":null,\"OS\":null,\"Broswer\":null,\"手机\":null,\"iso_code\":null},{\"VisitorId\":\"dbd1c1d6-8348-4674-9e48-65137bdc5c14\",\"OperatorID\":null,\"VisitorSignalId\": \"6c454fc2-cf74-4010-aecd-93d93408ad24\",\"类型\":\"访问者\",\"消息文本\":\"访问者 不再活动\",\"IsJoin\":false,\"MessageTime\":\"2/7/2017 5:11:53 AM\",\"File\":null,\"MessageType\":\"TransferMessage\",\"Name\":\"ksksksksksk\",\"Email\":\"skdsm@fdg.com\ ",\"IP\":\"123.231.110.188\",\"页面\":\"http://www.sathyabaman.com/\",\"评级\":\"无评级\",\"图片\":null ,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\":null,\"OperatorCount\":1,\"RequestTranscript\":false,\"Country\":null,\ "OS\":null,\"Broswer\":null,\"Mobile\":null,\"iso_code\":null},{\"VisitorId\":null,\"OperatorID\":\"81aebba9 -ddc3-4f58-b1af-ac912d23a41e\",\"VisitorSignalId\":null,\"Type\":\"Operator\",\"Messagetext\":\"Hi\",\"IsJoin\":false ,\"消息时间\":\"2017-02-07 10:47:54\",\"File\":null,\"MessageType\":\"NormalMessage\",\"Name\":\"sathya\",\"Email\":null,\" IP\":null,\"Page\":null,\"Rating\":null,\"Image\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\ ":\"sathya\",\"OperatorCount\":1,\"RequestTranscript\":null,\"Country\":null,\"OS\":null,\"Broswer\":null,\"手机\":null,\"iso_code\":null},{\"VisitorId\":null,\"OperatorID\":\"81aebba9-ddc3-4f58-b1af-ac912d23a41e\",\"VisitorSignalId\": null,\"Type\":\"Operator\",\"Messagetext\":\"如何 我今天能帮你吗?\",\"IsJoin\":false,\"MessageTime\":\"2017-02-07 10:50:07\",\"File\":null,\"MessageType\":\"NormalMessage\",\"Name\":\"sathya\",\"Email\":null,\" IP\":null,\"Page\":null,\"Rating\":null,\"Image\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\ ":\"sathya\",\"OperatorCount\":1,\"RequestTranscript\":null,\"Country\":null,\"OS\":null,\"Broswer\":null,\"手机\":null,\"iso_code\":null},{\"VisitorId\":null,\"OperatorID\":\"81aebba9-ddc3-4f58-b1af-ac912d23a41e\",\"VisitorSignalId\": null,\"Type\":\"Operator\",\"Messagetext\":\"????\",\"IsJoin\":false,\"MessageTime\":\"2017-02-07 10:57:13\",\"File\":null,\"MessageType\":\"NormalMessage\",\"Name\":\"sathya\",\"Email\":null,\" IP\":null,\"Page\":null,\"Rating\":null,\"Image\":null,\"CurrentOpImage\":null,\"FileUploadDetails\":null,\"FirstOperatorName\ ":\"sathya\",\"OperatorCount\":1,\"RequestTranscript\":null,\"Country\":null,\"OS\":null,\"Broswer\":null,\"手机\":null,\"iso_code\":null}]"

方法

+ (void) showCurrentHistory:(NSString *) historyString {

    NSString* processed = [historyString stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];

    NSString* withotExtras =  [[processed substringFromIndex:1] substringToIndex:[processed length] - 2];
    NSData *data = [[NSData alloc] initWithBytes:[withotExtras UTF8String] length:withotExtras.length];
    NSError *error;

    NSMutableArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

    for (NSDictionary *dic in jsonArray) {
        NSString *VisitorId         = [dic objectForKey:@"VisitorId"];
        NSString *VisitorSignalId   = [dic objectForKey:@"VisitorSignalId"];
        NSString *Type              = [dic objectForKey:@"Type"];
        NSString *Messagetext       = [dic objectForKey:@"Messagetext"];
        NSString *MessageType       = [dic objectForKey:@"MessageType"];
        NSString *MessageTime       = [dic objectForKey:@"MessageTime"];
        NSString *Image             = [dic objectForKey:@"Image"];
        NSString *FileUploadDetails = [dic objectForKey:@"FileUploadDetails"];
        NSString *FirstOperatorName = [dic objectForKey:@"FirstOperatorName"];
        NSString *Rating            = [dic objectForKey:@"Rating"];

        NSLog(@"----------------------- Current  Chat History --------------------------------");
        NSLog(@"VisitorId           : %@" , VisitorId);
        NSLog(@"VisitorSignalId     : %@" , VisitorSignalId);
        NSLog(@"Type                : %@" , Type);
        NSLog(@"Messagetext         : %@" , Messagetext);
        NSLog(@"MessageType         : %@" , MessageType);
        NSLog(@"MessageTime         : %@" , MessageTime);
        NSLog(@"Image               : %@" , Image);
        NSLog(@"FileUploadDetails   : %@" , FileUploadDetails);
        NSLog(@"FirstOperatorName   : %@" , FirstOperatorName);
        NSLog(@"Rating              : %@" , Rating);
        NSLog(@"------------------------------------------------------------------------------");

        MessageItemObject *item = [[MessageItemObject alloc] init];
        [item setVisitorId:VisitorId];
        [item setVisitorSignalId:VisitorSignalId];
        [item setType:Type];
        [item setMessagetext:Messagetext];
        [item setMessageType:MessageType];
        [item setMessageTime:MessageTime];
        [item setImage:Image];
        [item setFileUploadDetails:FileUploadDetails];
        [item setFirstOperatorName:FirstOperatorName];
        [item setRating:Rating];

        if (messagesList.count == 0) {
            messagesList = [[NSMutableArray alloc] init];
            [messagesList addObject:item];

            NSMutableDictionary *dic = [NSMutableDictionary dictionary];
            [dic setValue:@"Adding new chatting" forKey:@"Adding new Chatting"];

            [[NSNotificationCenter defaultCenter]
             postNotificationName:@"PassData"
             object:nil
             userInfo:dic];
        } else {
            [messagesList addObject:item];

            NSMutableDictionary *dic = [NSMutableDictionary dictionary];
            [dic setValue:@"Adding new chatting" forKey:@"Adding new Chatting"];

            [[NSNotificationCenter defaultCenter]
             postNotificationName:@"PassData"
             object:nil
             userInfo:dic];
        }
    }
}

如果没有表情符号,此方法可以正常工作,因为此字符串只有一个 ????\ emoji ,所以 NSJSONSerialization 不起作用。有人可以帮我解决这个问题。

【问题讨论】:

  • 你检查过这个吗? stackoverflow.com/questions/23814394/…
  • 如果你不打算使用它,你需要用空白字符串替换那个“Two Hear emoji”。或者用它的 unicode 替换它。
  • @User511 为 TNX 工作。
  • 我不认为他正在得到他的解决方案。为什么答案会被删除?

标签: ios objective-c iphone json nsjsonserialization


【解决方案1】:

试试这个。

将带有表情符号的字符串转换为带有 unicode 的字符串,如下所示

NSData *data = [strEmoji dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *unicodeString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

如果你想在某个地方显示那个表情符号,那么你可以转换回表情符号。

NSData *data = [unicodeString dataUsingEncoding:NSUTF8StringEncoding];
NSString *emojiString = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 

【讨论】:

    【解决方案2】:

    问题是您对 JSON 字符串进行硬编码并对其进行更改,不要对您的 JSON 字符串进行任何更改,而是直接将其转换为 NSData

    NSData *data = [historyString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSMutableArray* jsonArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
    NSLog(@"Array - %@", jsonArray);
    

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2017-06-30
      • 2018-03-20
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多