Accents ... encore et toujours


#1

Bonjour,

voici ci-dessous un résumé de mes observations dans un de mes premiers
développements rails… Ce qui explique sûrement la question :wink:

Merci d’avance pour toute contribution à l’éclairage de ma lanterne !

Didier

Description de l’environnement :

  • Windows (aïe non pas la lapidation !) 2000 Pro Français

  • Rails : 1.1.2

  • Ruby : 1.8.2

  • MySQL : 4.1.14

  • Document html commençant par :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>

Description du problème :

  • Rendu (sous Firefox) normal (character-encoding : UTF-8)

Description: Blème
Reporter: didier
Created at: Wed May 17 16:43:06 Paris, Madrid (heure d’?t?) 2006

  • Rendu en forçant character-encoding de Firefox à ISO-8859-1

Description: Blème
Reporter: didier
Created at: Wed May 17 16:43:06 Paris, Madrid (heure d’été) 2006

=> pas mieux, que du contraire !

Je me pose deux question :


  1. pourquoi le mélange de langues ?
  2. pourquoi le mauvais affichage du mot “été” ?

#2

Description: Blème
Reporter: didier
Created at: Wed May 17 16:43:06 Paris, Madrid (heure d’?t?) 2006

tu ne mettrais pas à jour un partial via un RJS ou autre appel ajax ?

je pense qu’il ne doit pas être (lui) dans le bon encodage


#3

Je commence comme ça…

<?xml version="1.0" encoding="UTF-8"?>

#4

Bonjour

A mon avis il faudrait regarder du coté du charset de la base de donnée.
La date semble sortir au format ISO-8859-1 et le texte encodé en UTF-8.

Le 17/05/06, Didier V. removed_email_address@domain.invalid a écrit :


#5

Bastien Q. a écrit :

Bonjour

A mon avis il faudrait regarder du coté du charset de la base de donnée.
La date semble sortir au format ISO-8859-1 et le texte encodé en UTF-8.

Soit la base n’est pas en UTF8, soit c’est l’éditeur qui a enregistré la
page qui ne l’a pas fait en UTF8. Quel est l’éditeur/IDE ?


#6

On 5/17/06, Mathieu C. removed_email_address@domain.invalid wrote:

Je commence comme ça…

<?xml version="1.0" encoding="UTF-8"?>

UTF-8 est l"encodage par défaut en XHTML donc pas besoin en soi.

Ce n’est pas tout à fait vrai et c’est une situation fondamentalement
ambigue.

Déjà parce que ton XHTML est très probablement envoyé en tant que
text/html et pas en tant que application/xhtml+xml. Du coup le moteur
n’a
à respecter que les règles HTTP et HTML. Bref, dans ces cas là ce qui
prime c’est la présence du codage caractère dans l’entête Content-Type.

A défaut de spécification explicite c’est de l’ISO-8859-1 (le défaut HTTP)
et pas de l’UTF-8 qui devrait être lu.

Bref, si rien n’est explicite dans l’entête HTTP et qu’il utilise une
déclaration text/html il fait très bien de déclarer le jeu de caractères
dans le prologue.

Et même dans le cas d’un document envoyé en tant que xhtml/xml, c’est
finalement ambigue. La norme XML nous dit :
“”“In the absence of information provided by an external transport
protocol (e.g. HTTP or MIME), it is a fatal error […] for an entity
which begins with neither a Byte Order Mark nor an encoding declaration
to
use an encoding other than UTF-8. Note that since ASCII is a subset of
UTF-8, ordinary ASCII entities do not strictly need an encoding
declaration.”""

Bref, si tu as un bête fichir sur disque, le codage par défaut est bien de
l’UTF-8. Par contre si tu passes sur HTTP, il y a bien une information
de
codage fournie par la couche transport (soit explicite, soit implicite
c’est à dire de l’iso-8859-1) donc tu as le droit d’utiliser un autre
codage que l’UTF-8 sans le spécifier dans le doc XML. Et pas réciprocité
si tu ne spécifies rien et que tu es en HTTP, un moteur pourrait
interpréter la norme en disant “mon xml est en iso8859-1”.

Je disais ambigue parce que la question est de savoir si un codage
implicite (par défaut) est considéré comme “provided by” ou pas.
Bref, même envoyé en application/xhtml+xml il vaut mieux utiliser une
déclaration de codage caractère dans le prologue. Ca a le mérite de lever
tout problème.

Oui le codage


Eric D.


#7

On 5/17/06, Mathieu C. removed_email_address@domain.invalid wrote:

Je commence comme ça…

<?xml version="1.0" encoding="UTF-8"?>

UTF-8 est l"encodage par défaut en XHTML donc pas besoin en soi.

Vu que le problème sus-nommé arrive dans une date, je soupçonne Didier
d’avoir une machine dont la “locale” n’est pas correcte (i.e. pas UTF-8)
et
donc le résultat de ctime/asctime qui fait la conversion est en
Latin1/9.

Je suggère un LANG=fr_FR.UTF-8 quelque part mais j’ai une totale
ignorance
de comment faire ça sous Windows.


#8

Didier, peux-tu nous soumettre une partie du code de ton controleur et
de ta
vue ?


#9

Thibaut Barrère a écrit :

Didier, peux-tu nous soumettre une partie du code de ton controleur et
de ta vue ?

Il semble que cela soit lié à l’OS … Je réessaie chez moi et que ne
constaté-je point la disparition des termes “heure d’été” !!!

Ici j’ai un Windows XP Pro en français.

La conclusion : j’abandonne les OS en français et surtout Windows
(quelle que soit la locale) ! Cet OS est épouvantable. Enfin quand je
dis “j’abandonne”, euh … je vais essayer d’abandonner :smiley:

Concernant les pistes évoquées:

  • Thibaut : aucun RJS ou AJAX, même pas de trace de “8859” dans aucun
    fichier du projet
  • Bastien : DB ok, en UTF-8
  • Zambra : quel lien entre les données créées par l’application en
    utilisation et l’IDE ayant servi à créer cette application, là je pige pas !

In fine, je rejoins l’hypothèse d’Olivier sur la “locale” comme la plus
vraisemblable dans le cas présent. Mais j’essaierai les déclarations de
Matthieu dès mon retour au bureau demain. Si ça marche je vous tiens
informés.

Merci à tous,

et à bientôt donc pour mes prochains déboires … sous Linux !

Didier


#10

La soluce donnée dans un autre fil :

A ajouter dans app/controllers/application.rb

before_filter :set_charset
def set_charset
@headers[“Content-Type”] = “text/html; charset=iso-8859-1”
end

Mathieu C. wrote:

Je crois me souvenir, et d鳯lé °as le temps de tester :

J’ai ajouté ¬’encoding ici, pour que celà °asse avec IE + Webrick

<?xml version="1.0" encoding="UTF-8"?>

Firefox n’en avait pas besoin. Il utilisait s?nt la d飬aration du
meta plus loin.

Sous apache j’utilisais AddDefaultCharset utf-8 dans mon VHOST, mais
il me semble que ç¡ n’avait pas d’effet vu que les entè´¥s é´¡ient
déª bien renseign饳, mais sert toujours pour les pages statiques.

Et cerise confite sous IIS il fallait aussi faire une bidouille pour
que ç¡ passe avec IE.


#11

Salut,

Je crains de ne plus voir assez clairement mon code. Ou il y a un
truc que je n’ai pas saisi mais j’ai vérifié sur 150 sources et j’ai
l’impression de ne pas m’être
trompé.Est que quelqu’un voit une erreur là-dedans :

<%= collection_select :customer, :id, @customers, :id, :name %>

<%= observe_field ‘customer_id’,
:url => {:controller => ‘admin’, :action => ‘find_users’},
:frequency => 0,
:with => ‘customer’ %>

J’ai testé tout le reste, ça marche (l’url, le contrôleur et le RJS).

Dans FireBug, aucune requête ajax ne se déclenche au changement
d’état du sélecteur…

Et je n’ai évidemment pas oublié prototype et cie. D’autres fonctions
ajax sur la page marchent.

Merci d’avance,
Nicolas_______________________________________________
Railsfrance mailing list
removed_email_address@domain.invalid
http://lists.rubyonrails.fr/mailman/listinfo/railsfrance


#12

Je crois me souvenir, et désolé pas le temps de tester :

J’ai ajouté l’encoding ici, pour que celà passe avec IE + Webrick

<?xml version="1.0" encoding="UTF-8"?>

Firefox n’en avait pas besoin. Il utilisait sûrement la déclaration du
meta plus loin.

Sous apache j’utilisais AddDefaultCharset utf-8 dans mon VHOST, mais
il me semble que ça n’avait pas d’effet vu que les entètes étaient
déjà bien renseignées, mais sert toujours pour les pages statiques.

Et cerise confite sous IIS il fallait aussi faire une bidouille pour
que ça passe avec IE.