@Shura
Shura
21 Mar 2016

Есть файл, первая строка которого начинается с символа # и почему-то она не ловится регекспом /^#.*/
Все остальные строки, которые начинаются на решётку, ловятся, первая - нет. Без символа начала строки ^ ловится и первая. Что за фигня? Начало файла не подразумевает начала строки?

21 Mar 2016

а # точно первый символ? может там сигнатура утфности файла стоит

21 Mar 2016

в хекс ридакторе открой

#iplho/3 в ответ на /1
21 Mar 2016

stager, ef bb bf 23
23 -#.
Да, файл utf-8, но что же делать? Файл не обязательно может быть utf-8, поэтому я открываю его как обычный и потом по ходу дела угадываю кодировку.

#iplho/4 в ответ на /1
21 Mar 2016

Shura, может вот ето?

You have to set the encoding for the input, use utf8 does not do that for you. Just insert

use open IN => ":utf8";

before the loop. See open for details.

#iplho/5 в ответ на /4
21 Mar 2016

stager, в этом случае я получу ошибку, если файл не utf-8

#iplho/6 в ответ на /5
21 Mar 2016

stager, если открывать файл как utf-8, то такая проблема действительно не возникает, просто фалй создаются разными людьми, некоторые из которых сидят на винде и по привычке сохраняют всё в cp-1251. Я решил, что проще будет угадывать кодировку на лету, чем пытаться исправить поведение этих людей.
Перелопатил пол скрипта, переведя всё на нативный формат и конвертя его в utf-8 только на выходе, всё хорошо, кроме вот этого маленького глюка

#iplho/7 в ответ на /5
21 Mar 2016

stager, нашёл!
Убираем BOM, а потом работаем как обычно:
s/^\N{BOM}//;

#iplho/8 в ответ на /5
21 Mar 2016

в етом перле всё можно зделать! :)

#iplho/9 в ответ на /8

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.