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


Автор: AlexanderI 6.6.2014, 13:10
Здравствуйте.

Есть файл XML (utf8). Нужные значения из него я получаю через XML::Simple функция XMLin().
Русские слова (кирилица) получаются вот такие \x{420}\x{43e}\x{434}\x{438}\x{442}\x{435}\x{43b}\x{44c}

Мне нужно сделать транслитерацию этого слова (\x{41e}\x{442}\x{447}\x{435}\x{442}).


Функция через которую я делаю транслитерацию выводит каракули. 

_kir2tr('переменная');

Пробывал добавлять

Код

encode('utf8','переменная');


тоже самое, только другие каракули. 

Добавлял use utf8; тоже самое.




Код

sub _kir2tr {

$_=$_[0]||''; 

s/ж/zh/g; 
s/Ж/Zh/gi; 
s/ч/ch/g; 
s/Ч/Ch/gi; 
s/ш/sh/g; s/Ш/Sh/gi; s/щ/sch/g; s/Щ/Sch/gi; s/ю/yu/g; s/Ю/Yu/gi; s/я/ya/g; s/Я/Ya/gi; 

tr/абвгдеёзийклмнопрстуфхцъыьэ/abvgdeezijklmnoprstufhc'y'e/; 
tr/АБВГДЕЁЗИЙКЛМНОПРСТУФХЦЪЫЬЭ/ABVGDEEZIJKLMNOPRSTUFHC'Y'E/; 
return $_;

}


Автор: arto 6.6.2014, 13:16
# perl -MLingua::Translit -CSA -le '$a = "\x{420}\x{43e}\x{434}\x{438}\x{442}\x{435}\x{43b}\x{44c}"; print $a; print Lingua::Translit->new("GOST 7.79 RUS")->translit($a)'
Родитель
Roditel`
#

Автор: AlexanderI 6.6.2014, 15:09

Немогу установить модуль Lingua::Translit.

Есть ли ещё какой-нибудь способ ?

Автор: arto 6.6.2014, 16:09
# perl -Mcharnames=:full -CS -le '%a = ("\N{CYRILLIC SMALL LETTER ER}" => "r", "\N{CYRILLIC SMALL LETTER O}" => "o", "\N{CYRILLIC SMALL LETTER DE}" => "d", "\N{CYRILLIC SMALL LETTER I}" => "i", "\N{CYRILLIC SMALL LETTER TE}" => t, "\N{CYRILLIC SMALL LETTER E}" => "e", "\N{CYRILLIC SMALL LETTER EL}" => "l", "\N{CYRILLIC SMALL LETTER SOFT SIGN}" => "x"); $a = "\x{440}\x{43e}\x{434}\x{438}\x{442}\x{435}\x{43b}\x{44c}"; print $a; print $a =~ s#.#$a{$&}||$&#gsmer'
родитель
roditеlx
#

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