Преобразование текста в 7-разрядный ASCII из командной строки

Я на OS X 10.5.5 (хотя это не имеет большого значения, я думаю)

У меня есть набор текстовых файлов с необычными символами, такими как двойные кавычки, эллипсы ( "..." ) в одном символе и т.д.

Мне нужно преобразовать эти файлы в старый добрый 7-разрядный ASCII, желательно без потери символьного значения (т.е. преобразовать эти эллипсы в три периода, backquotes в обычные и т.д.).

Для этого проконсультируйтесь с утилитой командной строки (bash)/script.

+4
17 окт. '08 в 15:54
источник поделиться
6 ответов

Elinks веб-браузер конвертирует объекты Unicode в их эквиваленты ASCII, предоставляя такие вещи, как "-" для "-" и "..." для "..." и т.д. Существует модуль python python-elinks, который использует ту же таблицу преобразования, и это будет быть тривиальным, чтобы превратить его в фильтр оболочки, например:

#!/usr/bin/env python
import elinks
import sys
for line in sys.stdin:
    line = line.decode('utf-8')
    sys.stdout.write(line.encode('ASCII', 'elinks'))
+2
17 окт. '08 в 16:56
источник

Посмотрите инструменты транслитерации; Мне нравится Unidecode (в Perl), и он не слишком сложно переносить на другие языки.

+1
17 окт. '08 в 16:48
источник

iconv должен делать это, насколько мне известно. Не 100% уверены в том, как он обрабатывает преобразования, где один входной символ должен/мог бы стать несколькими выходными символами, например, с примером многоточия... Что-то попробовать!

Обновление: я попробовал, и, похоже, он не работает. Он терпит неудачу, возможно, поскольку он не знает, как выразить многоточие (тестовый символ, который я использовал) в "меньшей" кодировке. Преобразование из UTF-8 в UTF-16 прошло хорошо.:/Тем не менее, iconv, возможно, стоит изучить далее.

+1
17 окт. '08 в 16:30
источник

Я использовал iconv для преобразования файла из UTF-16LE (малоизвестный, как я выяснил методом проб и ошибок), который был создан TextPad в Windows в ASCII на OSX следующим образом:

 cat utf16file.txt |iconv -f UTF-16LE -t ASCII > asciifile.txt

Вы можете транслировать через hexdump, а также просматривать символы и убедиться, что вы получаете правильный вывод, терминал знает, как интерпретировать UTF-16 и отображает его правильно, поэтому вы не можете просто сказать, но делать "cat", по файлу:

cat utf16file.txt | iconv -f UTF-16LE -t ASCII | hexdump -C 

Это показывает макет с шестнадцатеричными char кодами и символами ASCII с правой стороны, и вы можете попробовать разные кодировки в параметре -f "from", чтобы выяснить, с чем вы имеете дело.

Используйте значок "iconv -l" для отображения наборов символов, которые значок iconv может использовать в вашей системе.

+1
10 дек. '08 в 2:49
источник

версия python3:

#!/usr/bin/env python3
import sys
import elinks
for line in sys.stdin:
    sys.stdout.write(line.encode('ASCII', 'elinks').decode('utf-8'))

Стоит отметить, что python-elinks - чистый python; не требуется настоящая установка.

0
17 янв. '16 в 14:37
источник

Был вопрос вчера или накануне переименования файлов, и я показал Perl script rename.pl, который можно было бы использовать для задачи. Проблемная область - это знание кодирования нечетных символов и разработка правильной последовательности транслитераций. Я бы, вероятно, сделал это с адаптацией этого script, который выполнял все сопоставления последовательно. Выполнение этого по одному персонажу за раз было бы неудобно.

Вопрос: Как переименовать с префиксом/суффиксом

0
17 окт. '08 в 16:59
источник

Посмотрите другие вопросы по меткам или Задайте вопрос