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

  • Автор темы amorphius
  • Дата начала
A

amorphius

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

Vovochka

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

amorphius

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

amorphius

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

Vovochka

#6
Код:
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.
А Б В Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я
Ну извините что привожу нерабочий код. Я просто никогда не проверяю то, что пишу.

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

amorphius

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