Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перекодировка из win в utf, Глюк какойто....- 
:(
    Опции темы
les
Дата 6.5.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.4.2006

Репутация: нет
Всего: нет



Вот такой код

Код

use strict;

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'utf8');
setlocale(LC_ALL, 'utf8');

open INF , '<cp.txt';
    #open (OF , '>', $_[1]);
    open OFILE , '>utf.txt';
    while (<INF>)
        {
           #print; 
           $_=Encode::encode('utf8', Encode::decode('cp1251', $_));
           print OFILE $_;
        }


При прогоне через Komodo файл utf.txt создается как положено, а при консольном запуске того же файла, той же версией Perl получается пустой... Че подправить надо? Подскажите плиз...

Это сообщение отредактировал(а) les - 6.5.2008, 22:09
PM MAIL   Вверх
les
Дата 6.5.2008, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.4.2006

Репутация: нет
Всего: нет



Лана.. всё.. 
добавил

use Encode 

и в консоли тож запахало... но почему в IDE не ругался и работал.... не приятно.

PM MAIL   Вверх
les
Дата 7.5.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.4.2006

Репутация: нет
Всего: нет



Вопрос такого плана...
Есть ли какие органичение на использование рег.выраж с utf8???
Потому как если например в переменной $my будет строка в Юникоде, то после 
Код

$my=~ s/(\w+)//;
 она преврящается а набор крякозябр. Локаль использую в utf8, исполняемый pl тоже в юникоде....
Можно ли как это побороть, либо есть пути обхода этой проблемы....
PM MAIL   Вверх
JUmPER
Дата 7.5.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Код

use utf8;

--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
les
Дата 7.5.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.4.2006

Репутация: нет
Всего: нет



Цитата(JUmPER @ 7.5.2008,  16:13)
Код

use utf8;

Не, не помогло...
вот это пример 
Код

use strict;

my $news= "Пресс-секретарь президента France Presse.";
$news=~ s/(?:\d*|_)//g;
        #$news[$i]=~ tr/[А-Я]/[а-я]/;
            
        my @temp_word;
        while ( $news=~ s/(\w+)//)
            {
                #$temp_word[$i] = $1;
                push (@temp_word,$1);
            }


в $news уходит тольео France и Presse , как это исправить? 
Всё тут в UTF8 и сам скрипт, и само данные...


Это сообщение отредактировал(а) les - 7.5.2008, 19:35
PM MAIL   Вверх
tolkien
Дата 7.5.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



попробуй из utf8->acsii
обработать рег выражением
результат из acsii->utf8
PM MAIL   Вверх
konstant1n
Дата 7.5.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



для начала, как у же сказали 
Код

 use utf8;


далее, если мне не изменяет память, то \w  это word-character для ASCII, для юникода надо использовать классы символов, вроде
p{Letter} и тд.   Подробнее см сюды http://www.regular-expressions.info/unicode.html

И еще:   судя по коду задача разбить некий текст на слова.  Вы ищите последовательность букв и считаете это словом.  Как насеет сокращений "т.д." , емайл адресов,
слов "через-тире" и проч?    Чтоб не возится с кучей исключений лучше разделять по пробелам, более точно по white-space.  Все что не white-space до следующего white-space это слово.   Обычно еще перед этим проходятся по тексту убирают white-space вначале/вконце текста и в самом тексте меняют мultiple white-space -> single white-space ( s/\s+/\s/g; )
PM MAIL   Вверх
les
Дата 7.5.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.4.2006

Репутация: нет
Всего: нет



Цитата(konstant1n @ 7.5.2008,  20:50)



И еще:   судя по коду задача разбить некий текст на слова.  Вы ищите последовательность букв и считаете это словом.  Как насеет сокращений "т.д." , емайл адресов,
слов "через-тире" и проч?    Чтоб не возится с кучей исключений лучше разделять по пробелам, более точно по white-space.  Все что не white-space до следующего white-space это слово.   Обычно еще перед этим проходятся по тексту убирают white-space вначале/вконце текста и в самом тексте меняют мultiple white-space -> single white-space ( s/\s+/\s/g; )

Да... Спасибо, про спец символы вроде правда.... и \w будет тогда \p{IsWord}

По поводу разбора.... Я привел пример такой, чтоб было видно на чем застрял..
Я текс из html выдергиваю, поэтому он проходит несколько степеней очистки.
PM MAIL   Вверх
JUmPER
Дата 8.5.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



с директивой use utf8 \w изменяется для обработки уникода.

кстати, если в коде есть не латинские буквы (я про кирилицу в рег выражении), то было бы здорово сохранить исходник в соответствующй кодировке (utf8).
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
shamber
Дата 8.5.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



было бы здорово сохранить исходник в соответствующй кодировке (utf8)
JUmPER
не внимательно читаете smile
Цитата(les @  7.5.2008,  11:46 Найти цитируемый пост)
 Локаль использую в utf8, исполняемый pl тоже в юникоде....




Это сообщение отредактировал(а) shamber - 8.5.2008, 09:37
PM MAIL Jabber   Вверх
amg
Дата 8.5.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(JUmPER @  8.5.2008,  09:26 Найти цитируемый пост)
с директивой use utf8 \w изменяется для обработки уникода.
Что-то я засомневался, ведь, судя по документации, use utf8 должно влиять только на интерпретацию перлом текста скрипта, и решил проверить.
Код
use Encode;
use utf8;

# Слово "текст" во внутреннем представлении perl (в юникоде)
$text = "\x{0442}\x{0435}\x{043A}\x{0441}\x{0442}";

# Проверка
$str = encode('KOI8-R', $text);
print "$str\n";

$str = $text;
print "Unicode:\n";
print "\\w         OK\n" if $str =~ /^\w{5}$/;
print "\\p{IsWord} OK\n" if $str =~ /^\p{IsWord}{5}$/;

$str = encode("utf8", $text);
print "UTF8:\n";
print "\\w         OK\n" if $str =~ /^\w{5}$/;
print "\\p{IsWord} OK\n" if $str =~ /^\p{IsWord}{5}$/;
Результат
Код
текст
Unicode:
\w         OK
\p{IsWord} OK
UTF8:
То же самое получается и без use utf8;
Вывод: документация, вроде, не врет, use utf8; не влияет на распознавание букв.

Приятным сюрпризом для меня оказалось, что кириллические буквы в юникоде подходят \w даже без use locale. Хотя сейчас вспомнил, что об этом уже говорилось здесь.

Чтобы работать со строками в предсавлении UTF8, их сначала нужно декодировать.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.