2010-06-14 3 views
2

J'ai une application qui est en cours d'expansion au Royaume-Uni et je vais devoir ajouter un support pour Latin-9 Unicode. J'ai fait quelques recherches sur Google, mais je n'ai rien trouvé de solide quant à ce qui est impliqué dans le processus. Des conseils?Perl latin-9? Unicode - besoin d'ajouter de l'aide

Voici une partie (seulement les bits pour des choses 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); 
    ... 

Toute aide serait grand et merci.

EDIT: Je n'ai trouvé ce post: http://czyborra.com/charsets/iso8859.html

+3

Pourquoi avez-vous besoin de soutenir Latin-9? Y a-t-il quelque chose de spécifique dans ce format pour les données que vous allez recevoir? Si certains caractères doivent être pris en charge plutôt qu'un jeu de caractères spécifique, je vous recommande d'utiliser full sur Unicode et UTF-8. – mpeters

+0

Latin-9 est comme Latin-1 avec le symbole de l'euro, c'est un choix populaire si vous ne voulez pas ou ne pouvez pas passer à l'Unicode. – leonbloy

+0

Latin-9 est une exigence d'affaires –

Répondre

5

Unicode::String est ancienne et conçu pour ajouter le support Unicode à Perls plus. Les versions modernes de Perl (5.8.0 et plus) ont un support Unicode natif. Regardez le module Encode et le calque :encoding. Vous pouvez obtenir une liste des encodages pris en charge dans votre Perl avec perldoc Encode::Supported. Fondamentalement, il suffit de décoder/encoder en Latin-9 sur la sortie & d'entrée. Le reste du temps, vous devez utiliser les chaînes UTF-8 natives de Perl.

# 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 
+0

Merci, j'ai regardé la référence que vous avez donnée mais je n'ai pas vu le Latin-9. D'autres références/conseils? –

+0

Merci encore, j'ai un autre problème car certains des clients exécutant l'ancien logiciel pourraient ne pas être en mesure de mettre à niveau vers une nouvelle version de Perl. Existe-t-il un support pour Latin-9 utilisant la méthode Unicode :: String au lieu de: encoding? Je veux juste rendre la mise à niveau aussi facile que possible pour les clients. –

+0

Essayez 'perldoc Encode :: Supported' pour obtenir la liste des encodages supportés. search.cpan.org ne semble pas trouver la version actuelle (car il a été déplacé à un endroit différent dans l'archive). – cjm

0

Dans perldoc Encode :: Prise en charge, elle est appelée ISO-8859-15 (!). Voici une sortie fortement réduite de 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.