1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

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

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

  1. amorphius

    amorphius Гость

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

    Vovochka Гость

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

    amorphius Гость

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

    Vovochka Гость

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

    amorphius Гость

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

    Vovochka Гость

    Репутация:
    0
    Код (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 Гость

    Репутация:
    0
    Файл сохранен как utf8?
     
  8. amorphius

    amorphius Гость

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

    Vovochka Гость

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

    amorphius Гость

    Репутация:
    0
    проблема решена
     
Загрузка...

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