Objective c 使用åöä;在NSD词典的索引中

Objective c 使用åöä;在NSD词典的索引中,objective-c,unicode,nsstring,plist,diacritics,Objective C,Unicode,Nsstring,Plist,Diacritics,我正在创建一个应用程序,用户可以在其中单击tableview中的城市名称。我正在识别用户选择的与NSDictionary中的键匹配的名称 问题是一些城市的名字中有åäö,因为该应用程序应该在瑞典运行 NSDictionary存储在plist文件中。看起来像这样: { Göteborg = { name = "Göteborg"; adress = "xxx"; phone = "xxx"; }; } 我该怎么做?我可以想出一些策

我正在创建一个应用程序,用户可以在其中单击tableview中的城市名称。我正在识别用户选择的与NSDictionary中的键匹配的名称

问题是一些城市的名字中有åäö,因为该应用程序应该在瑞典运行

NSDictionary存储在plist文件中。看起来像这样:

{
    Göteborg = {
        name = "Göteborg";
        adress = "xxx";
        phone = "xxx";
    };

}
我该怎么做?我可以想出一些策略,但我不知道如何实施:

  • 以某种方式逃离plist文件中的åäöin。但是怎么做呢

  • 在plist中,我可以调用键Goteborg而不是Göteborg,在代码中,在调用字典中的键之前,始终将åäö交换为a o。但是如果我不想循环字符串并建立一个新的字符串,我该怎么做呢?我认为这可能是一种简单的方法,例如“将所有对象更改为o”方法

  • 这是我在尝试编译应用程序时收到的错误消息:

    English.lproj/factories.plist: Unexpected character { at line 1
    Command /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/copyplist failed with exit code 1
    

    提前谢谢

    NSString
    plist
    文件格式支持Unicode,没有任何问题。您不应该关心在NSDictionary中使用Unicode字符串

    你想做的事情仍然有两个潜在的问题

    您可能需要在将它们添加为键时以及在检查键是否在听写器中之前进行更改


    第二,您可能希望能够在字典中进行部分匹配,例如,如果有人输入的名称没有发音符号(重音)。为此,我认为在散列中添加别名会更容易。

    这是完全可能的。粘贴的plist描述看起来像是浏览器显示方式的粘贴。事实上,.plist文件是.xml文件,需要以与资源组中的MyApplicationName-Info.plist相同的方式(一组带有Apple plist头的字典)构造,.plist文件也需要采用UTF-8格式(以节省麻烦/加载f.ex.
    NSArray initWithContentsOf…

    如果我猜的话,我认为plist是由web上的脚本生成的,而不是保存在UTF-8中。在Mac或Notepad++上的文本编辑器中检查编码


    这当然是完全可能的,我整天都在做这件事

    使用十六进制编辑器,我发现从web复制时出现了不正确的符号。删除这些字符修复了问题

    为什么这样不行?实际上,密钥可以是任何类型的对象,也可以是带有特殊字符的字符串。如果城市有特殊字符,会有什么问题?可能您在字符串操作中没有使用正确的NSString编码…请检查“展平”特殊字符的答案:我用错误消息更新了我的帖子。我已经在外部文本编辑器(TextWrangler)中打开了该文件,以确保它保存为UTF8。如果不是以前的话,现在的问题仍然是一样的。我还没有在我的代码中做任何编码,这是必要的吗?检查Xcode中的文件属性——Xcode认为它在UTF-8中吗?它保存在UTF8中。我在一个externa文本编辑器中打开了它,并确保将其保存在UTF8中。实际上,我确实从web复制了一个xml结构。在编辑时,xCode将格式更改为我提供的格式。当我在另一个文本编辑器中打开它时,没有XML,我从web复制的标题也被删除。但是,如果我不使用åäö,它就可以工作,我想问题出在其他地方……或者……?下面是一个示例,说明当您的字典正确存储在文件中时,您应该看到的格式。你的格式是这样的吗?否则,请在问题中插入plist中文本编辑器的剪切/粘贴,我将提供帮助。