Categories

Checkio.ORG

Subscribe to Posts

Email:

  • 13Jul

    по мне, так в утфе все хорошо, еслиб не утфный флаг.  по ходу вообще не понятно, зачем его лепят туда, ведь он то нужен только для утф16, ну даладно.

    Бока в перле вылазят во время конкатенации. Тут умные дятьки пишут, что

    Конкатенация строки, имеющей флаг UTF-8, со строкой, у которой этот флаг снят, приводит к автоматическому преобразованию строки без флага. При этом Perl исходит из того, что строка в кодировке “latin-1″ или той кодировке, которая установлена с помощью прагмы “encoding”.

    другие умные дятьки ( гдето в пермонксах) , что
    use encoding ':utf8';
    зло. Ну как зло… вобщем я точно не помню, надо порыться в монксах, но помоему глюк с аплоадом картинок начинается.. при определении размера…

    Еще есть use utf8 , все скаляры в исходниках считать утфными. Сначало пользовался этой фишкой, а потом необходимость отпала.
    Вобщем закончелось все тем, что я написал “типокостыль”, для снятия со структуры утфного флага, потомучто XML::Simple вообще его везде растовляет, а для меня это критично.

    Вобщем собственно типс:

    sub _utf8_off_all{
    my $self = shift;
    my $ref = shift;
    my $rr = ref($ref);
    if($rr){
    if($rr eq 'ARRAY'){
    for(my $i=0;$i<@$ref;$i++){
    $ref->[$i] = $self->_utf8_off_all($ref->[$i])
    }
    }elsif($rr eq 'HASH'){
    foreach my $k (keys %$ref){
    if(Encode::is_utf8($k)){
    Encode::_utf8_off($k);
    }
    $ref->{$k} = $self->_utf8_off_all($ref->{$k});
    }
    }else{
    die 'UNKNOWN REF in encodeall';
    }
    }else{
    if(Encode::is_utf8($ref)){
    Encode::_utf8_off($ref);
    }
    }
    return $ref;
    }

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 22May

    Сегодня таки добил эту тему, наконец-то. Короче сейчас еще как всегда куча работы, поэтому пока память еще свежа выкидываю все, что нашел.

    начнем с перла.


    #!/usr/bin/perl -C

    это из perldoc почитаете, позволяет автоматом кодировать СТД потоки.

    в нем же есть прагма utf8 как минимум необходима для обозначения того, что скаляры, которые используются в коде утфные ( необходимо при этом сразу следить, чтоб и исходники были утфные). Да и вообще функционал предоставляет полезный:

    upgrade, downgrade добавляет или убирает утфный флаг

    encode, decode кодирование и декодирования текста

    is_utf8 проверяет, является ли стринг – утфным.

    далее от перла перемещаемся к DBI, а именно к DBD::mysql

    вот такая у меня сейчас функция коннекта:


    sub init_dbh{
    my $self = shift;
    my $dbh = DBI->connect_cached("DBI:mysql:database=conveyor;host=127.0.0.1", 'root', '',{AutoCommit => 1, RaiseError=> 1, PrintError =>0});
    $dbh->{'mysql_auto_reconnect'} = 1;
    $dbh->{'mysql_enable_utf8'} = 1;
    $dbh->do('SET NAMES utf8');
    return $dbh;
    }

    я думаю тут и так все без слов понятно. Если что, по ссылке выше все это мона почитать.

    ну и наконец-то мускул.

    в конфиге устанавливаем все кодировки, все возможные и невозможные:


    [client]
    default-character-set=utf8
    [mysqld]
    collation_server=utf8_unicode_ci
    character_set_server=utf8
    default-character-set=utf8

    далее, заходим через консоль в бд., вводим “status”, все должно быть утф:

    Server characterset: utf8
    Db characterset: utf8
    Client characterset: utf8
    Conn. characterset: utf8

    если в базе не утф, то
    ALTER DATABASE database_name CHARACTER SET utf8;
    каждую таблицу проверяем:
    SHOW CREATE TABLE table_name;
    если чарсет не утф, то
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8;
    кодировки могут быть индивидуально установленны у полей, их также необходимо менять
    ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8;

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

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags:

   

Recent Posts

Recent Comments

  • Благодарю, начал изучать fabric с вашей статьи....
  • Идея действительно отличная и очень радует то, что подобн...
  • Спасибо...
  • Там четыре круглых кнопочки. Подразумевается, что каждая ...
  • А в чем заключатеся неправильна работа?...