по мне, так в утфе все хорошо, еслиб не утфный флаг. по ходу вообще не понятно, зачем его лепят туда, ведь он то нужен только для утф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;
}

Recent Comments