Существует ли приложение командной строки Mac OS X, которое может преобразовывать текстовые кодировки из одного типа в другой? (Специально для преобразования Mac OS Roman в utf8)

Я хотел бы вызвать утилиту командной строки в Mac OS X 10.8, которая дает мне возможность преобразовать текстовый файл, сохраненный в стандартной западной кодировке Mac OS Roman, в более общую UTF-8.

Я буду вызывать утилиту из созданного мной AppleScript. AppleScript очень медленный при работе с очень большими текстовыми блоками. Таким образом, я хочу выполнять синтаксический анализ и преобразование текста с помощью командной строки OS X. Я нашел инструмент под названием «sed», который позволяет мне анализировать текст. Тем не менее, есть еще много элементов файла, которые необходимо очистить, символы, которые выглядят как мусор, если файл открыт как utf-8 (например, умные кавычки и многоточие).

Я думаю, что принудительное преобразование кодировки текста может помочь удалить все символы, отличные от utf8, в файле. Однако я не понимаю, как «sed» может легко преобразовать кодировку текста.

Я уже сохранил временный текстовый файл под именем MacRoman на диск с помощью встроенных подпрограмм AppleScript.

Требования:

  • Командная строка для производительности
  • Предпочитайте собственные инструменты, поскольку у других пользователей моего скрипта не обязательно будет надлежащий набор инструментов, если он не встроен. (Хотя я мог бы добавить проверку в свой скрипт и прервать, если нужный инструмент отсутствует)

Есть ли у кого-нибудь из вас какие-либо идеи относительно встроенного инструмента командной строки, который может преобразовать кодировку текста, или существующего пакета, который лучше подходит для этой задачи?

@bmargulies: На самом деле, я действительно пытаюсь получить средство для автоматического преобразования причудливых символов, таких как многоточие и умные кавычки, в «настоящие», «чистые» кавычки ASCII, апострофы и точки. Может ли iconv сделать это? Или мне нужно вручную конвертировать файлы?
@TomGewecke: На самом деле источником был не MacRoman, а «iso-8859-1». Однако использование iconv не привело к изящной (и автоматической) замене причудливых кавычек и многоточий стандартными кавычками и точками ASCII.
Есть ли какая-то причина, по которой вы должны иметь ascii, а не utf-8, который вы изначально запрашивали? Конечно, в MacRoman или ISO Latin 1 нет ascii-эквивалента многих символов, поэтому я не думаю, что вы можете делать то, что хотите, с помощью этой утилиты. Вероятно, требуется поиск/замена.
@TomGewecke: Причина, по которой я пытаюсь упростить ситуацию, заключается в том, что файлы CSV, которые создает мой AppleScript, выглядят уродливо в Excel из-за присутствия этих символов, отличных от ASCII. Microsoft Excel (как для Windows, так и для Mac) — единственная программа, в которой возникают проблемы с импортом CSV-файлов, закодированных в iso-8859-1.
У Excel не должно быть этой проблемы, вы должны иметь возможность установить любую кодировку для импорта, например, см. superuser.com/questions/280603/…
→ Darkstar: для ICU, site.icu-project.org .

Ответы (2)

Другой способ преобразовать символы, отличные от ASCII, в варианты ASCII — использовать iconv -t ASCII//TRANSLIT:

$ echo ‘’“”–—…äé | iconv -t ASCII//TRANSLIT
''""--..."a'e

ASCII//IGNOREудалит символы, отличные от ASCII, но вы также можете сделать это, например, с помощью tr -dc '\0-\177'.

Разрешено ли iconvтранслитерировать: ä → a" ?
@danielAzuelos Я не знаю. Однако способ замены символов зависит от реализации: например, iconv, поставляемый с Debian, заменяется äпросто на a.

iconvопределенно является инструментом выбора здесь:

iconv -f MACROMAN -t UTF-8 your-roman-encoded-file.txt > utf-8-encoded-file.txt

Запустите iconv --list, чтобы увидеть список всех поддерживаемых кодировок.

как только я понял, что это не MacRoman, а "iso-8859-1", я попробовал еще раз. Он по-прежнему не делал того, что я хотел. Я не думаю, что iconv может сделать то, что я хочу: изящно заменить все причудливые расширенные символы стандартными точками, апострофами и двойными кавычками.