Remplacer les accents d'un enregistrement en utf8

Thibaut Barrère wrote:

tu utilises activesupport 2.2.2, je crois que parameterize n’existait
pas encore dans cette release.

Bonjour Thibaut,

Ca fait un bail, mais j’ai dû laisser tomber le développement pour faire
de la gestion de projets… Je me suis donc remis au “vrai” travail et
ai mis à jour mes gems, pour inclure activesupport 2.3.2 ; pourtant,
lorsque j’essaie d’utiliser “parameterize”, j’ai toujours un message
d’erreur sur la non existence de la fonction “normalize”. J’ai trouvé un
post qui mentionnait le problème et recommandait de le résoudre avec un
“$KCODE = ‘u’” (Unicode). Malheureusement, ça ne change rien pour moi…

Merci de vos suggestions,

Christophe.

Chris Gers32 a écrit :

    from 

=> “u”
parameterize' from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/string/inflections.rb:106:in parameterize’
from (irb):6

As-tu le fichier :

c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/chars.rb
http://api.rubyonrails.org/files/vendor/rails/activesupport/lib/active_support/multibyte/chars_rb.html

En effet, la méthode
normalize(ActiveSupport::Multibyte::Chars)
est dans ce fichier.

Sinon peut-être un problème de Windows. Typiquement la méthode qui est
appelé dans ton cas n’est appelé que quand Iconv ne fonctionne pas :frowning:

cf :


Cyril M.

Attention, une chaîne avec accents tapé dans la ligne de commande de
windows n’est pas traitée de la même manière qu’une même chaîne écrite
dans un fichier par exemple (dans le détail je ne sais pas trop
pourquoi, mais il vaut mieux le savoir quand on fait des essais).

Exemples que j’ai pondu ce matin, et je viens de rajouter le KCODE qui
fait que ça marche bien sous win aussi :

Pas besoin de préciser le KCODE dans le contexte de rails, je pense
qu’il le fait comme un grand.

Qui dit fichier sous windows sans se préoccuper de l’encodage dit
encodage
CP1252 par défaut, et le CP ce n’est ni de l’UTF, ni de l’ISO, c’est
leur
vilaine norme pénible juste à eux pour être pas compatible.

Michel B.

2009/6/18 AlSquire [email protected]

Cyril M. wrote:

En effet, la méthode
normalize(ActiveSupport::Multibyte::Chars)
est dans ce fichier.

Sinon peut-être un problème de Windows. Typiquement la méthode qui est
appelé dans ton cas n’est appelé que quand Iconv ne fonctionne pas :frowning:

Bonjour Cyril,

La méthode “normalize” est bien définie dans le fichier que tu décris,
mais elle ne semble pas fonctionner pour les caractères accentués. J’ai
repris un exemple dudit fichier, pour illustrer le problème :

irb(main):004:0> require ‘active_support’
=> true
irb(main):005:0> $KCODE = ‘u’
=> “u”
irb(main):006:0> "The Perfect String ".mb_chars.downcase.strip.normalize
=> #<ActiveSupport::Multibyte::Chars:0x40f117c @wrapped_string=“the
perfect string”>
irb(main):007:0> “La Chaîne Parfaite”.mb_chars.downcase.strip.normalize
NoMethodError: undefined method `normalize’ for “la cha\214ne
parfaite”:String
from (irb):7

Et pour ce qui est de “iconv”, les lettres accentuées sont carrément
supprimées : Iconv.iconv(‘ascii//ignore//translit’, ‘utf-8’,
“éthanol”).to_s retourne “thanol”…

le CP ce n’est ni de l’UTF, ni de l’ISO, c’est leur vilaine norme pénible juste à eux pour être pas compatible.

Le CP 1252 s’appuyait sur ce qui était disponible à ce moment là de la
standardisation, c’est à dire un draft ANSI, draft qui a ensuite été
amendé pour devenir le latin-1 qu’on connait aujourd’hui, incompatible
sur un certain nombre de points.

C’est toujours la même histoire, pour Microsoft, Google ou Mozilla: ou
bien ils font un pari avant que les drafts soient finalisés et ils
sortent des produits (win95, webkit ou autre), ou ils ne sortent pas
de produits et quelqu’un d’autre les sort à la place :slight_smile:

– Thibaut

Non c’était bien l’ANSI quand il n’y avait que l’ANSI. Et puis il y a eu
l’ISO (oups, loupé le changement de cap) et puis il y a eu l’UTF
(carramba,
encore raté).

Moi je vois plutôt ça comme ça : il y a les gens qui sortent un bon
produit
à peu près fini une fois tous les 6-7 ans, avec quelques bugs qui
nécessitent un service pack, ou deux, ou trois, et qui sortent beaucoup
de
merdes entre temps juste pour occuper l’espace, sans se préoccuper des
standards, et très cher, et d’un autre côté il y a les autres, dont
certains
font des produits gratuits, open-source, puissants, évolutifs,
modulables,
et respectueux des standards.

D’où l’absence de comparaison entre par exemple Microsoft et Google ou
Mozilla. Dans les trois, il y en a un qui sera toujours loin derrière
tant
qu’il se conduira de la même façon.

Michel B.

2009/6/18 Thibaut Barrère [email protected]

qu’il se conduira de la même façon.
Houla - y’a du lourd pour de la flamewar :slight_smile:

Je retourne à mon développement Silverlight IronRuby Google Wave Qui
Tourne Dans FireFox ™.

– Thibaut

(bien entendu, quand je dis loin derrière, je parle de la qualité du
produit, pas du fric accumulé)

Michel B.

2009/6/18 Michel B. [email protected]

Au final, j’ai suivi les conseils trouvés ici DIXIS showing international or accented characters

Plutôt que de convertir des caractères accentués en caractères non
accentués dans mon application Rails, je les ai finalement gardés et du
coup, mon problème principal était de passer des accents à une base
Oracle via une requête SQL. Les problèmes d’encodage ont été résolus
grâce à l’insertion du code suivant dans application_controller.rb :

class ApplicationController < ActionController::Base

before_filter :headers_iso

def headers_iso
# make sure the charset matches the default Oracle NLS setting
headers[“content-type”]= “text/xml; charset=windows-1252”
end
end

Merci,

Christophe.