Проблема кодирования строки NSTask - PullRequest
0 голосов
/ 28 марта 2010

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

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

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

- Ry

1 Ответ

1 голос
/ 29 марта 2010

Проблема в том, что я могу использовать такие термины, как «Río Gallegos». К сожалению (как я проверял в fileSystemRepresentation), он подвергается преобразованию и оказывается «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 .

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

...