Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > кодировка


Автор: od0201 9.1.2013, 00:31
windows 7 x64
ActivePerl-5.16
везде utf-8

задача. преобразовать в большие-русские, даже если пользователь регистром или раскладкой ошибся, но...
Код

use POSIX qw(setlocale LC_ALL LC_CTYPE LC_NUMERIC);
use locale;
my $g_setlocale_all = POSIX::setlocale( &POSIX::LC_ALL, "ru_RU.UTF-8" );
....
$b1= 'привет';
$a2= uc  $a1; # $a1-слово 'привет', переданное скрипту из формы get методом
$b2= uc  $b1;  
print "1.-$g_setlocale_all-<br>" ;
print "2.$a1-$a2<br>"; 
print "3.$b1-$b2<br>"; 
print "4.$a1-$a2-$b1-$b2"; 


выводит:
Код

1.--
2.привет-ЯрШвет
3.привет-ПРИВЕТ
4.привет-ЯрШвет-привет-ПРИВЕТ


Почему происходят такие выводы в строках 1,2,4, при том что 3 отрабатывает нормально?

P.S. При установке Windows указал "региональные стандарты" Украинские, но после замены на Русские изменений не произошло.

Автор: arto 9.1.2013, 03:01
perldoc perlunicode   perlunifaq    perluniintro  perluniprops  perlunitut

Автор: DurRandir 9.1.2013, 03:23
http://stackoverflow.com/a/6163129

Автор: od0201 5.2.2013, 12:11
Спасибо всем кто пытался помочь, но я решил проблему следующим образом
создал в кодировке ANSI и подключил при помощи require файл, примерно такого содержания
Код

sub registr{
    $slovo=shift;
    Encode::from_to($slovo, 'utf-8', 'windows-1251');
    $slovo=~tr/а-яqwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOPASDFGHJKLZXCVBNMіїєІЇЄ/А-ЯЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЙЦУКЕНГШЩЗФЫВАПРОЛДЖЭСМИТЬЫЪЭЫЪЭ/;
    Encode::from_to($slovo, 'windows-1251','utf-8');
    return $slovo;
}
1;

данный способ также решит проблему в следующих случаях:
- sprinf "%20s",$a 
- length
- работа с XLS при помощи OLE

з.ы. Я уверен что есть более "правильный способ", но я его не нашел

Автор: Muan 7.2.2013, 21:58
POSIX и Win32 не совместимы

------------------------------------
https://www.allmetals.ru/metals/copper/physprop/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)