| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Регулярные выражения, Regexp::Common и UTF-16 |
| Автор: Даниил 18.7.2006, 00:17 |
| Вопрос в следующем: Вот есть некий фрагмент кода == use Regexp::Common qw[Email::Address]; use Email::Address; ... ... my $text = read_textfile($fullpath); ###ищем e-mail'ы в файле my (@found) = ($text=~ m/($RE{Email}{Address})/g); my (@addrs) = map $_->address, Email::Address->parse("@found"); ##ищем числа в файле my (@d) = ($text =~m/(\d+)/g); ###Функция считывания из файла sub read_textfile { my $filename = $_[0]; my $str = ''; my @arr; if (open(TEXT_FILE, $filename)) { @arr = <TEXT_FILE>; close(TEXT_FILE); } else { print "error reading $filename : $! <BR>"; } return join('',@arr); } == Всё работает хорошо, если мы имеем обычный ANSI-файл. А если файл записан в UTF-16, то ничего не работает. Вопрос - что нужно, чтобы регулярные выражения и Regexp::Common работали и в UTF-16? Документацию по работе с Unicode в Perl читал, но не очень понял, как же быть именно с моим случаем. |
| Автор: nitr 18.7.2006, 02:29 | ||
| можно perldoc Encode отличный модуль ;) (имхо самый практичный) можно также читать юникод через файлов. манипулятор:
и совет по поводу метода чтения файла, который ты использовал... поиск на форуме поможет найти "лучший" вариант ;) |
| Автор: Даниил 18.7.2006, 12:47 |
| nitr, В случае, когда я пишу open TEXTFILE, "<:encoding(UTF-16)", $filename; у меня из файла вообще ничего не считывается. |
| Автор: nitr 18.7.2006, 19:21 | ||
| ну во-первых используем подсветку (благо отлично реализована на форуме) я же изначально сказал, можно так же использовать модуль, для этого в командной строке выполнить: perldoc Encode а так... ...
а точно текст UTF-16 поиск на форуме, тут очень много уже обсуждали, а так читайте perldoc Encode |
| Автор: Даниил 21.7.2006, 01:49 |
| nitr, поиском на форуме искал. Про регулярные выражения и UTF-16 не нашёл. Да, точно UTF-16, а не UTF8. На каждый символ под два байта, в т.ч. и латинские. perldoc Encode прочитал. Опять-таки, как применить к регулярным выражениям - не нашёл. |
| Автор: nitr 23.7.2006, 06:27 |
| пока не пойму что и для чего... в регулярках зачем применять... работай с текстом, а потом кодируй и декодируй ;) my $text = read_textfile($fullpath); после этой строки обрабатывай переменную $text |