Comment faire pour convertir en UTF-8 en ISO-8859-1 en Ruby 2.0?
Fuseaux horaires de (date)-temps et codant pour les chaînes ne sont pas un problème si vous ne disposez pas de faire la conversion entre eux. En Ruby 1.9 et 2.0, de l'encodage semblent être les nouveaux fuseaux horaires à partir d'anciennes versions Rubis, ils provoquent rien que des ennuis. Iconv a été remplacé par l'encodage natif fonctions. Comment voulez-vous convertir le standard UTF-8 à ISO-8859-1, par exemple pour l'utilisation dans les systèmes Windows? Dans le Ruby 2.0 de la console de la coder la fonction ne fonctionne pas, même si elle doit être en mesure de convertir à partir d'une source d'encodage vers une destination à l'encodage via encode(dst_encoding, src_encoding) → str
?
>> "ABC äöüÄÖÜ".encoding
=> #<Encoding:UTF-8>
>> "ABC äöüÄÖÜ".encode("UTF-8").encode("ISO-8859-1")
=> "ABC \xE4\xF6\xFC\xC4\xD6\xDC"
>> "ABC äöüÄÖÜ".encode("ISO-8859-1","UTF-8")
=> "ABC \xE4\xF6\xFC\xC4\xD6\xDC"
Je suis à l'aide de Ruby 2.0.0 (Révision 41674) sur un système linux.
"ABC äöüÄÖÜ".encode("ISO-8859-1","UTF-8")
convertit en UTF-8 pour le Latin-1 et renvoie le Latin-1 chaîne, "ABC äöüÄÖÜ"
est déjà en UTF-8 donc le deuxième argument de encode
n'est pas pertinent. Qu'attendez-vous "ABC äöüÄÖÜ".encode("ISO-8859-1","UTF-8")
faire et comment est votre attente différente de ce qui arrive?La chaîne "ABC \xE4\xF6\xFC\xC4\xD6\xDC" ne ressemble pas à un texte en cours de validité avec codant pour moi, ou est-il? Au moins les caractères spéciaux ne s'affichent pas correctement. Le but était de convertir des chaînes UTF-8 pour une importation Excel. Jusqu'à présent, il ne semble pas bien fonctionner. L'idée était de savoir si j'ai réussi à convertir en UTF-8 en ISO-8859-1, puis Excel importation et l'affichage des textes sur Windows.
C'est un codage Latin-1 chaîne affichée dans un format UTF-8 d'un terminal.
OriginalL'auteur 0x4a6f4672 | 2013-10-09
Vous devez vous connecter pour publier un commentaire.
La
encodage
méthode ne travail.Nous allons créer une chaîne avec U+00 FC (
ü
):Ruby code pour cette chaîne de caractères en UTF-8:
En UTF-8,
ü
est représenté comme195
188
(décimal):Maintenant, nous allons convertir la chaîne de caractères ISO-8859-1:
En ISO-8859-1,
ü
est représenté comme252
(décimal):En UTF-8 cependant
252
est une séquence non valide. C'est pourquoi votre terminal/console affiche le caractère de remplacement "�" (U+FFFD) ou aucun caractère à tous.Afin d'afficher ISO-8859-1 caractères codés, vous aurez à passer votre terminal/console pour que l'encodage, trop.
0xFC est en effet la valeur hexadécimale pour 252. Cela signifie Ruby 2.0 n'est pas capable d'afficher des chaînes de caractères ISO-8859-1 codant correctement, en utilisant les personnages de droite? Pourquoi faut-il travailler avec l'encodage UTF-8, mais pas avec de l'ISO-8859-1 codage?
Ruby n'a pas affichage les cordes, votre terminal. Changement de l'UTF-8, ISO-8859-1 et, vous verrez un
ü
.Ok, donc, la raison de l'encodage semble mal, c'est que le terminal/console/bash ne peut pas l'afficher, car il a le tort locale/jeu de caractères jeu de caractères de la carte/whatever.
href="http://en.wikipedia.org/wiki/UTF-8#Codepage_layout" >en.wikipedia.org/wiki/UTF-8#Codepage_layout 192-193 et 245-255 (globules rouges) ne sont pas valides
OriginalL'auteur Stefan