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

  • Автор темы 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, тем не менее база возвращает данные в иероглифах. Как мне прочесть еще в нормальном виде данные из базы?
 
V

Vovochka

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