Perl латиница-9? Юникод - нужно добавить поддержку
У меня есть приложение, которое расширяется до Великобритании, и мне нужно будет добавить поддержку Юникода Latin-9. Я немного погуглил, но не нашел ничего убедительного в том, что вовлечено в процесс. Какие-нибудь советы?
Вот некоторый код (только биты для Unicode)
use Unicode::String qw(utf8 latin1 utf16);
# How to call
$encoded_txt = $self->unicode_encode($item->{value});
# Function part
sub unicode_encode {
shift() if ref($_[0]);
my $toencode = shift();
return undef unless defined($toencode);
Unicode::String->stringify_as("utf8");
my $unicode_str = Unicode::String->new();
# encode Perl UTF-8 string into latin1 Unicode::String
# - currently only Basic Latin and Latin 1 Supplement
# are supported here due to issues with Unicode::String .
$unicode_str->latin1( $toencode );
...
Любая помощь будет большой и спасибо.
РЕДАКТИРОВАТЬ: я нашел этот пост: http://czyborra.com/charsets/iso8859.html
2 ответа
Unicode:: String является древним и предназначен для добавления поддержки Unicode для старых Perls. Современные версии Perl (5.8.0 и выше) имеют встроенную поддержку Unicode. Посмотрите на модуль Encode и слой : encoding. Вы можете получить список поддерживаемых кодировок в вашем Perl с помощью perldoc Encode::Supported
,
По сути, вам просто нужно декодировать / кодировать в Latin-9 при вводе и выводе. В остальное время вы должны использовать нативные строки Perl UTF-8.
# Read a Latin-9 file:
open(my $in, '<:encoding(Latin9)', 'some/file');
my $line = <$in>; # Automatically converts Latin9 to UTF-8
# Write a Latin-9 file:
open(my $out, '>:encoding(Latin9)', 'other/file');
print $out $line; # Automatically converts UTF-8 to Latin9
В perldoc Encode::Supported это называется ISO-8859-15 (!). Вот несколько сильно урезанных выводов из perldoc:
Lang/Regions ISO/Other Std. DOS Windows Macintosh Others
----------------------------------------------------------------
Latin9 [4] iso-8859-15
----------------------------------------------------------------
[4] Nicknamed Latin0; the Euro sign as well as French and Finnish
letters that are missing from 8859-1 were added.