如何在核心数据中保存非英语/特殊字符?

时间:2016-07-05 12:24:21

标签: ios core-data character-encoding utf

来自服务器的字符串语言是 Herbew ,当我直接将数据显示到我的视图中时,字符会正确,但下次我尝试从数据库中获取它时#34; ???? "而不是正确的角色!

//这就是我将显示名称与DB //

联系起来的地方
    -(BOOL)addContact:(ALContact *)userContact {

        ALDBHandler * dbHandler = [ALDBHandler sharedInstance];

        DB_CONTACT* existingContact = [self getContactByKey:@"userId" value:[userContact userId]];
        if (existingContact) {
            return NO;
        }

        BOOL result = NO;

        DB_CONTACT * contact = [NSEntityDescription insertNewObjectForEntityForName:@"DB_CONTACT" inManagedObjectContext:dbHandler.managedObjectContext];
        contact.displayName = userContact.displayName;

        NSError *error = nil;
        result = [dbHandler.managedObjectContext save:&error];

        if (!result) {
            NSLog(@"addContact DB ERROR :%@",error);
        }

        return result;
}

2 个答案:

答案 0 :(得分:2)

很难确切地说出问题的确切位置(我们可以通过评论长时间讨论),但答案如下:

  1. 核心数据不需要任何特殊步骤来存储非英文文本。它只是有效。然而...
  2. 字符串编码非常易于搞砸,是一种非常常见的错误来源。在你的代码中的某个地方(可能在多个地方),你会得到错误的编码,这会导致伪造的字符串。它看起来只是一个核心数据问题,因为你在核心数据中使用这个编码严重的字符串。
  3. 作为一项实验,我使用" Master-Detail Application"创建了一个新的Xcode项目。模板,使用核心数据。然后我在默认情况下添加了一个字段" Event"名为" name"并修改了UI以显示该字符串。

    然后我将您的字符串指定为" name":

    的值

    newEvent.name = @"מתןאצ׳אט";

    创建几个实例,退出并重新启动应用程序后,我可以验证字符串是否已正确保存,检索完整,并在UI中正确显示:

    iOS Simulator screenshot

    因此,请停止查看您的核心数据代码,并开始查看处理此字符串的每一步。

答案 1 :(得分:1)

而不是保存为String保存为NSdata。

下面的代码可能会帮助您保存和检索它。

a[np.ix_(np.arange(0,a.shape[0],2),np.arange(0,a.shape[1],2))] += 1
a[np.ix_(np.arange(1,a.shape[0],2),np.arange(1,a.shape[1],2))] += 1