Как сделать строку в юникоде?

Тема в разделе "Perl программирование", создана пользователем amorphius, 28 апр 2009.

  1. amorphius

    amorphius Гость

    Есть такой участок кода:
    Код (Text):
    $a = "фываолдж";
    for(my $i=0;$i<8;$i++)
    {
    print substr($a,$i,1)." ";
    }
    Все просто, выводит через пробел все буквы строки (она будет русской). В заголовке странице указана кодировка - charset=UTF-8, текст скрипта сохранен в юникоде, но все равно сервер выдает вместо нормальной русской строки вопросительные знаки. Если убрать пробел между буквами, то все отображает корректно. Подскажите пожалуйста в чем проблема?
     
  2. Vovochka

    Vovochka Гость

    Добавте директиву
    Код (Text):
    use utf8;
    В вашем варианте вы выводе не по одному символу, а по одному байту.
    Когда же вы убираете пробел, ты два байта одного символа оказываются вместе и получается исходный символ.
    Правда в вашем случае выводиться не вся "фываолдж" а лишь "фыва".
     
  3. amorphius

    amorphius Гость

    substr в смысле плохая функция? чем же мне тогда разбить строку?
     
  4. Vovochka

    Vovochka Гость

    Я же написал.
    Код (Text):
    use utf8;
    И все будет :)
     
  5. amorphius

    amorphius Гость

    не помогает особо use utf8. вот код еще один
    Код (Text):
    $alphabet = "АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
    for ($i=0;$i<32;$i++)
    {
    print substr($alphabet,$i,1)." ";
    }
    выводит как ни странно не весь алфавит, а
    Код (Text):
    Б Г Е Ж И Ї К М О Р Т Ф Ц Ш Ь Я
    т.е. через один символ
     
  6. Vovochka

    Vovochka Гость

    Код (Text):
    vovochka@vocomp:~> cat test.pl                                                                                                                                                                           
    #!/usr/bin/perl                                                                                                                                                                                          

    use strict;
    use utf8;

    my $alphabet = "АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
    for (my $i=0;$i<32;$i++)                         
    {                                                
    print substr($alphabet,$i,1)." ";            
    }vovochka@vocomp:~> perl test.pl                 
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.     
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    Wide character in print at test.pl line 9.
    А Б В Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я
    Ну извините что привожу нерабочий код. Я просто никогда не проверяю то, что пишу.

    А вообще конечно интересно как вы добились такого результата? Ваша ОСь - винда?
     
  7. Vovochka

    Vovochka Гость

    Файл сохранен как utf8?
     
  8. amorphius

    amorphius Гость

    проблема частично решена, выводит теперь весь алфавит. но появилась другая, также я полагаю связана с юникодом.
    у меня стоит прагма
    Код (Text):
    use utf8;
    наполнение для сайта берется из базы, в базе все кодировки установлены на юникод, после соединения с базой сразу выполняю
    Код (Text):
    set names utf8
    в странице указано charset=UTF-8, тем не менее база возвращает данные в иероглифах. Как мне прочесть еще в нормальном виде данные из базы?
     
  9. Vovochka

    Vovochka Гость

    Ничем не могу помочь. Эксперементируйте :)
     
  10. amorphius

    amorphius Гость

    проблема решена
     
Загрузка...

Поделиться этой страницей