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

标签 ios core-data character-encoding utf

来自服务器的字符串语言是 赫伯当我直接向我的 View 显示该数据时,这些字符是正确的,但是下次当我尝试从数据库中获取它时“ ????”而不是正确的字符!

//这是我将显示名称的联系人保存到数据库的地方//

    -(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;
}

最佳答案

很难准确判断哪里出了问题(我们可以在评论中反复讨论很长时间),但答案会是这样的:

  • Core Data 不需要任何特殊步骤来存储非英文文本。它只是工作。然而...
  • 字符串编码为 非常容易搞砸,并且是极其常见的错误来源。在您的代码中的某个地方(可能在多个地方)您的编码错误,这会导致虚假字符串。它看起来只是一个 Core Data 问题,因为您将这个编码错误的字符串与 Core Data 一起使用。

  • 作为一个实验,我使用 Core Data 使用“Master-Detail Application”模板创建了一个新的 Xcode 项目。然后我向默认的“事件”实体添加了一个名为“名称”的字段,并修改了 UI 以显示该字符串。

    然后我将您的字符串分配为“名称”的值:

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

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

    iOS Simulator screenshot

    因此,停止查看您的 Core Data 代码并开始查看处理此字符串的每一步。

    关于ios - 如何在核心数据中保存非英语语言/特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38203399/

    相关文章:

    ios - Objective C 到 Swift 的转换(协议(protocol))

    ios - 隐藏状态栏但不隐藏自定义 UIWindow

    swift - 如何在不使用内置撤消管理器的情况下撤消 NSManagedObject 删除?

    ios - 测试迁移映射模型的核心数据

    objective-c - 如何在 Core Data 中存储 CLPlacemark 地址数据

    php - 带有奇怪字符的 Codeigniter xml_from_result 输出 "´╗┐´╗┐"

    java - Websphere 上的外部 javascript 字符编码

    java - 如何在使用 PDPageContentStream/PDDocument 时处理 Java 中的非 ASCII 字符

    ios - THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY

    ios - 如何从 Alamofire 错误中获取底层错误?