Использование å ö ä в тональности NSDictionary

Я создаю приложение, в котором пользователь может щелкнуть название города в табличном представлении. Я идентифицирую имя, выбранное пользователем для соответствия ключу в NSDictionary.

Проблема в том, что в названии некоторых городов есть å ä ö, так как приложение должно работать в Швеции.

NSDictionaries хранятся в plist-файле. Выглядит так:

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

}

Как мне заставить это работать? Я могу придумать несколько стратегий, которые я не знаю, как реализовать:

  1. Каким-то образом экранируйте å ä ö в файле plist. Но как?

  2. В plist вместо Göteborg я мог бы назвать ключ Goteborg и в коде всегда заменять å ä ö на a 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

Заранее спасибо!


person Nicsoft    schedule 04.06.2011    source источник
comment
Почему это не сработает? На самом деле ключ может быть любым объектом, а также допустима строка со специальными символами.   -  person    schedule 04.06.2011
comment
в чем проблема, если в городах есть специальные символы? Возможно, вы не используете правильную кодировку для NSString в своих строковых операциях...   -  person Tatvamasi    schedule 04.06.2011
comment
Проверьте этот ответ, чтобы сгладить специальные символы: stackoverflow.com/questions/5217632/   -  person cem    schedule 04.06.2011
comment
Я обновил свой пост с сообщением об ошибке. Я открыл файл во внешнем текстовом редакторе (TextWrangler), чтобы убедиться, что он сохранен как UTF8. Если раньше не было, то сейчас с той же проблемой. Я ничего не делал в своем коде, нужно ли это?   -  person Nicsoft    schedule 04.06.2011
comment
Проверьте свойства файла внутри Xcode - думает ли Xcode, что он в UTF-8?   -  person spacehunt    schedule 05.06.2011
comment
Нет, xCode на самом деле этого не делал. Я их менял, но без изменений. В итоге я удалил файлы и добавил их снова. С другим именем, так как xCode пожаловался, что файлы были удалены, когда я добавил их с тем же именем. Всем спасибо, очень помогли.   -  person Nicsoft    schedule 05.06.2011


Ответы (3)


Форматы файлов NSString и plist без проблем поддерживают Unicode. Вы не должны заботиться об использовании строк Unicode в NSDictionary.

Тем не менее есть две потенциальные проблемы с тем, что вы хотите сделать.

Вам может потребоваться нормализовать строки Unicode при добавлении их как ключи и перед проверкой наличия ключа в словаре.

Во-вторых, вы можете захотеть иметь возможность выполнять частичные совпадения внутри словаря, например, если кто-то вводит имя без диакритических знаков (ударения). Для этого, я думаю, было бы проще добавить псевдонимы внутри хэша.

person sorin    schedule 04.06.2011

Это вполне возможно. Вставленное описание plist выглядит как вставка из-за способа его отображения в браузере. На самом деле файлы .plist являются файлами .xml и должны быть построены так же (массив словарей с заголовком Apple-plist), как MyApplicationName-Info.plist в вашей группе ресурсов, а также должны быть в кодировке UTF-8. (чтобы избежать хлопот / быть загруженным с помощью f.ex. NSArray initWithContentsOf...).

Если бы я угадал, я думаю, что plist создается скриптом в Интернете, а не сохраняется в UTF-8. Проверьте кодировку в текстовом редакторе на Mac или в Notepad++.

Это, конечно, вполне возможно, я делаю это целыми днями. :)

person Henrik Erlandsson    schedule 04.06.2011
comment
Он сохраняется в UTF8. Я открыл его в текстовом редакторе externa и убедился, что сохранил его в UTF8. На самом деле, я скопировал xml-структуру для начала из Интернета. При редактировании xCode изменил формат на тот, который я представил. Когда я открываю его в другом текстовом редакторе, XML отсутствует, и заголовок, который я скопировал из Интернета, также удаляется. Но так как это работает, если я не использую å ä ö, я думаю, проблема в другом... или...? - person Nicsoft; 04.06.2011
comment
Вот пример формата, который вы должны увидеть, когда ваш словарь правильно сохранен в файле. Ваш придерживается этого формата? Еще вставь вырезку/вставку из текстового редактора из плиста в свой вопрос и я помогу. code.google.com/ p/cfpropertylist/source/browse/trunk/examples/ - person Henrik Erlandsson; 12.06.2011

Используя шестнадцатеричный редактор, я обнаружил неправильные знаки, которые следовали при копировании из Интернета. Удаление этих символов решило проблему.

person Nicsoft    schedule 19.12.2011