2010-03-28 2 views
0

В моей программе я получаю сообщение через NSTask. По какой-то причине иногда я не получал никаких результатов (хотя код, по-видимому, был таким же, как и команда из CLI, которая работала нормально), поэтому я проверил свой код и нашел в документации Apple, что при добавлении аргументов в объект NSTask ", объект NSTask преобразует оба пути и строки в аргументах в соответствующие строки в стиле C (используя файлSystemRepresentation) перед передачей их заданию через argv []" (snip).Проблема с кодировкой строки NSTask

Проблема в том, что я могу использовать термины типа «Río Gallegos». К сожалению (как я проверил с файловым представлением), который проходит преобразование и оказывается «RiÃÅo Gallegos».

Как я могу это решить?

- Ry

ответ

1

Проблема заключается в том, что я мог бы Grep такие термины, как "Рио-Гальегос". К сожалению (как я проверил с файловым представлением), который проходит преобразование и оказывается «RiÃÅo Gallegos».

Это одна возможная интерпретация. Что вы имеете в виду, так это то, что «Río Gallegos» преобразуется в «Ri \xcc\x81 o Gallegos» - байты UTF-8 для представления разложенного i + сочетания острого акцента.

Ваша проблема в том, что grep не интерпретирует эти байты как UTF-8. grep использует некоторую другую кодировку - по-видимому, MacRoman.

Решение состоит в том, чтобы сообщить grep использовать UTF-8. Это требует установки переменной LC_ALL в вашей задаче grep environment.

Быстрое и грязное значение для использования будет «en_US.UTF-8»; более правильным способом было бы получить код языка для первичного preferred language пользователя, замените дефис, если таковой имеется, с подчеркиванием и в конце этого слова вставьте «.UTF-8».

+0

Спасибо за ответ, но он не работает ... Я также попытался установить переменную LC_CTYPE и LANG в среду задачи grep, но все равно не повезло. – ryyst

+0

Как вы определили, что grep интерпретирует байты так, как вы показали в своем вопросе? –

+0

Через метод NFString для создания представлений и NSLog(). Эксперимент показал, что работают только строки без «нестандартных» символов, таких как «í». Я вижу, что это не доказательство, но это убедительные доказательства. – ryyst

Смежные вопросы