时间:2011-06-04 15:21:23

标签: objective-c unicode nsstring plist diacritics

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

问题在于,一些城市的名字中有äö,因为应用程序应该在瑞典工作。

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

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

}

我应该如何做这项工作?我可以想到一些我不知道如何实施的问题:

  1. 以某种方式逃离plist文件中的åäöin。但是怎么样?

  2. 在plist中,我可以拨打哥德堡的钥匙而不是Göteborg,在代码中,在拨打字典中的密钥之前,总是将åäö换成a o。但是,如果我不打算遍历字符串并构建一个新字符串,我该怎么做呢?我认为这可能是一种简单的方式,例如:一个“改变所有ö到o”的方法。

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

    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
    

    提前致谢!

3 个答案:

答案 0 :(得分:3)

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

您想要做的事情仍有两个潜在的问题。

当您将它们作为键添加时,在检查密钥是否在dictonary中之前,您可能需要normalize Unicode strings

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

答案 1 :(得分:2)

完全有可能。 plist的粘贴描述看起来像浏览器显示它的方式粘贴。实际上,.plist文件是.xml文件,需要以与Resources组中的MyApplicationName-Info.plist相同的方式构建(带有Apple-plist标题的字典数组),并且还需要使用UTF-8 (为了节省麻烦/加载f.ex。NSArray initWithContentsOf...)。

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

这当然是完全可能的,我这样做的所有doo dah日。 :)

答案 2 :(得分:0)

使用十六进制编辑器我发现从网络上复制时出现了错误的符号。删除这些字符可以解决问题。