Perl и чтение файлов с разными кодировками - PullRequest
1 голос
/ 01 марта 2010

Я использую скрипт perl для чтения в файле, но я не уверен, в какой кодировке находится файл. По сути, мой файл представляет собой список названий книг, но с каждой книгой связана другая информация (автор , дата публикации и т. д.). Таким образом, каждое название книги находится в отдельном фрагменте данных для книги. Поэтому я перебираю файл построчно, пока не найду регулярное выражение '/Book Title: (.*)/' и не возьму то, что есть в скобках. Затем я создаю отдельный файл .txt с именем текстового файла, являющегося моей книгой. Однако на моем Unix-сервере, когда я смотрю на имя файла, это на самом деле не, например, 'LordOfTheFlies.txt', а скорее 'LordOfTheFlies^M.txt'

Что это за «^ M»? Это странное окончание кодирования строки, которое я не принимаю во внимание? Я попробовал chomp, но он не работает. Какая кодировка файлов лучше всего подходит для работы с perl?

Ответы [ 3 ]

5 голосов
/ 01 марта 2010

Это дополнительный символ возврата каретки, который системы Windows вставляют перед символами перевода строки (M == 13-я буква, следовательно, ASCII 13 отображается как ^ M).

Это не имеет ничего общего с кодировкой файлов, это просто политика конца строки, кусающая вас. Perl обычно хорошо обрабатывает символы конца строки, но если они встречаются где-то еще, кроме конца строки, вы должны сделать это самостоятельно. Вы можете использовать s / \ r // вместо chomp (), чтобы получить их.

0 голосов
/ 01 марта 2010

Попробуйте chop вместо 'chomp'. Chomp удаляет «символ новой строки». s / \ r // тоже хорошо. Для вашего общего вопроса вы можете использовать соответствующий модуль для типа файла, который вам нужен, чтобы сделать вашу жизнь проще и лучше с Perl.

0 голосов
/ 01 марта 2010

Перед обработкой файла вам необходимо знать кодировку файла, которая определяется производителем файла.
Это «^ M» это control-M, который является возвратом каретки и не требуется в файловых системах Unix.
Похоже, файл создан в Unix и передан в Windows. Его также можно добавить с помощью ftp, когда текстовый файл передается в виде двоичных файлов.

...