Quelle est la différence exacte entre Windows-1252(1/3/4) et ISO-8859-1?
nous hébergeons des applications PHP sur une installation LAMP basée sur Debian. Tout va bien - performance, administration et gestion. Cependant, étant un devs un peu nouveau (nous sommes encore au lycée) nous avons rencontré quelques problèmes avec le codage de caractères pour les Charsets occidentaux.
Après avoir fait beaucoup de recherches je suis arrivé à la conclusion que l'information en ligne est quelque peu déroutant. Il parle de Windows-1252 étant ANSI et totalement compatible ISO-8859-1.
donc, Quelle est la différence entre Windows-1252 (1/3/4) et ISO-8859-1? Et où est-ANSI venir en cela de toute façon?
quel encodage devrions-nous utiliser sur nos serveurs (et stations de travail) Debian pour nous assurer que les clients obtiennent toutes les informations de la manière prévue et que nous ne perdons pas de caractères en chemin?
4 réponses
j'aimerais répondre à ceci d'une manière plus web-like Et afin d'y répondre donc nous avons besoin d'un peu d'histoire. Joel Spolsky a écrit un très bon introductionary article sur le minimum absolu de tous les dev devraient savoir sur l'Encodage Unicode.
Ours avec moi ici parce que cela va être un peu looong
répondre. :)
comme une histoire, je vais pointer quelques citations de là: (Merci beaucoup Joel! :))
le seuls les caractères qui importaient étaient de bonnes vieilles lettres anglaises sans accent, et nous avions un code pour elles appelé ASCII qui était capable de représenter chaque caractère en utilisant un nombre entre 32 et 127. L'espace était de 32, la lettre "A" de 65, etc. Cela pourrait facilement être stocké en 7 bits. La plupart des ordinateurs de l'époque utilisaient des octets de 8 bits, donc non seulement vous pouviez stocker tous les caractères ASCII possibles, mais vous aviez un peu entier à épargner, qui, si vous étiez mauvais, vous pourriez utiliser pour votre propre sournois but.
et tout allait bien, en supposant que vous étiez anglophone. Parce que les octets ont de la place pour jusqu'à huit bits, beaucoup de gens ont pensé, "mon Dieu, nous pouvons utiliser les codes 128-255 pour nos propres fins."Le problème était, beaucoup de gens avaient cette idée en même temps, et ils avaient leurs propres idées de ce qui devrait aller où dans l'espace de 128 à 255.
donc maintenant les "jeux de caractères OEM" ont été distribués avec les PC et ceux-ci étaient toujours différents et incompatible. Et à notre étonnement contemporain - tout était parfait! Ils n'avaient pas L'Internet et les gens échangeaient rarement des fichiers entre des systèmes avec des emplacements différents.
Joel continue en disant:
en fait, dès que les gens ont commencé à acheter des PC en dehors de L'Amérique toutes sortes de jeux de caractères OEM différents ont été imaginés, qui ont tous utilisé les 128 premiers caractères pour leurs propres besoins. Finalement ce OEM free-for-all a été codifié dans L'ANSI norme. Dans la norme ANSI, tout le monde était d'accord sur ce qu'il fallait faire en dessous de 128, ce qui était à peu près le même que ASCII, mais il y avait beaucoup de façons différentes de gérer les caractères de 128 et plus, selon l'endroit où vous viviez. Ces différents systèmes ont été appelés pages de code.
et c'est ainsi que sont nées les" pages de Code Windows". Ils étaient en fait "parentés" par les pages de code DOS. Et puis Unicode est né! :) et UTF-8 est "un autre système pour le stockage de votre chaîne de points de code Unicode" et, en fait, "chaque point de code de 0 à 127 est stocké dans un octet" et est le même que ASCII. Je ne vais pas entrer dans plus de détails de Unicode et UTF-8, mais vous devriez lire sur le BOM,Stockage et Codage Des Caractères en tant que général.
sur "The ANSI conspiracy", Microsoft admet en fait l'étiquetage erroné de Windows-1252 dans un glossaire:
le jeu de caractères Windows (WinLatin1, ou Windows code page 1252, pour être exact) utilise certaines de ces positions pour les caractères imprimables. Ainsi, le jeu de caractères Windows n'est pas identique à la norme ISO 8859-1. Le jeu de caractères Windows est souvent appelé "ANSI character set", mais cela est sérieusement trompeur. Il n'a pas été approuvé par L'ANSI.
Donc, ANSI lorsque renvoyer aux jeux de caractères Windows n'est pas ANSI-certifié! :)
en tant Que Jukka souligné (les crédits vont à vous pour la belle réponse )
Windows-1252 ISO Latin 1, aussi connu comme ISO-8859-1 comme un codage de caractères, de sorte que la gamme de code 0x80 à 0x9F est réservé pour les caractères de contrôle dans ISO-8859-1 (soi-disant contrôles C1), où dans Windows-1252, certains des codes Il sont assignés à des caractères imprimables (la plupart des caractères de ponctuation), d'autres sont laissés indéterminé.
cependant mon opinion personnelle et la compréhension technique est que les deux Windows-1252 et ISO-8859-1 NE SONT PAS DES ENCODAGES WEB! :) Donc:
pour les pages Web veuillez utiliser UTF-8 comme encodage pour le contenu Ainsi, stockez les données comme UTF-8 et "spit it out" avec le en-tête HTTP:
Content-Type: text/html; charset=utf-8
.il y a aussi une chose appelée HTML content-type méta-balise:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Maintenant, quels navigateurs en fait, quand ils rencontrent cette balise est qu'ils commencent à partir du début du document HTML à nouveau afin qu'ils puissent réinterpréter le document dans le codage déclaré. Cela ne devrait se produire que s'il n'y a pas d'en-tête 'Content-type'.Utiliser d'autres encodages si les utilisateurs de votre système de fichiers générés à partir d'elle. Par exemple, certains utilisateurs occidentaux peuvent avoir besoin de fichiers Excel générés, ou CSVs dans Windows-1252. Si c'est le cas, encoder du texte dans cette région et ensuite, conservez - le sur le fs et servez-le comme un fichier téléchargeable.
il y a une autre chose dont il faut être conscient dans le conception de HTTP: Le mécanisme de distribution de l'encodage du contenu devrait fonctionner comme ceci.
I. le client demande une page web dans un contenu spécifique-types et encodages via: le 'Accept' et le 'Accept-Charset' demander des en-têtes.
II. puis le serveur (ou le web application) renvoie le contenu trans-codé à cet encodage et au jeu de caractères.
ce n'est pas le cas dans la plupart des applications web modernes. Ce qui se passe réellement c'est que les applications web servent (forcent le client) le contenu comme UTF-8. Et cela fonctionne parce que les navigateurs interprètent les documents reçus en se basant sur les en-têtes de réponse et non sur ce qu'ils attendaient réellement.
nous devrions tous aller Unicode, alors s'il vous plaît, s'il vous plaît, s'il vous plaît, utilisez UTF-8 pour distribuer votre contenu partout possible et surtout applicable. Ou d'autre les anciens de l'Internet va vous hanter! :)
P. Des articles plus intéressants sur L'utilisation des caractères MS Windows dans les Pages Web peuvent être trouvés ici et ici.
Le plus autorité en référence à la signification de l'encodage des caractères des noms est le registre IANA Jeux De Caractères.
Windows-1252 est communément appelé Windows Latin 1 ou Windows West European ou quelque chose comme ça. Il diffère de ISO Latin 1, également connu sous le nom de ISO-8859-1 comme un codage de caractères, de sorte que la gamme de code 0x80 à 0x9F est réservé pour les caractères de contrôle dans ISO-8859-1 (contrôles C1), alors que dans Windows-1252, certains des codes Il ya assignée à des caractères imprimables (surtout des caractères de ponctuation), d'autres sont laissés non définis.
ANSI vient ici comme un nom erroné. Microsoft a une fois soumis Windows-1252 à L'American National Standards Institute (ANSI) pour être adopté comme une norme; la proposition a été rejetée, mais Microsoft appelle toujours leur code "ANSI". Pour plus de confusion, ils peuvent utiliser "ANSI" pour encodages (essentiellement, le "codage 8 bits natif" d'une installation Windows).
dans le contexte web, déclarant ISO-8859-1 sera considéré comme si vous aviez déclaré Windows-1252. La raison en est que les commandes C1 ne sont pas utilisées, ou utiles, sur le web, alors que les caractères ajoutés sont souvent utilisés, même sur les pages mal étiquetées comme ISO-8859-1. Donc, en termes pratiques, peu importe lequel vous déclarez.
il pourrait y avoir encore quelques navigateurs qui interprètent réellement les données comme ISO-8859 - 1 si cela est déclaré, Mais ils doivent être très rares (la dernière fois que je me souviens avoir vu était une version D'Opera about il y a dix ans).
Vous ne décrivez pas les problèmes que vous avez rencontrés. La cause la plus fréquente de problèmes semble être que les données sont en fait encodées UTF-8 mais déclarées comme ISO-8859-1 (ou Windows-1252), ou vice versa. Cela devient un réel problème pour les auteurs de pages web si un serveur forceContent-Type
en-tête déclarant un encodage de caractère et il en est un qu'ils ne peuvent pas traiter dans leur environnement de création (ou ne savent pas comment le faire).
8859-1 et 1252
http://www.w3schools.com/charsets/ref_html_ansi.asp
ANSI (Windows-1252) ANSI était le caractère par défaut défini dans Windows up. pour Windows 95.
ANSI est aussi appelé Windows-1252.
Note IMPORTANTE Les normes ANSI et ISO-8859-1 sont très semblables. Ils ne diffèrent que en 32 caractères.
dans L'ANSI, les caractères de 128 à 159 sont utilisés pour certains des personnages comme le symbole de l'Euro.
dans la norme ISO-8859-1, ces caractères sont associés à des caractères de contrôle qui: sont inutiles en HTML.
__ alors, une suggestion alors voyez si 128 est le symbole de l'euro.. si c'est le cas, C'est ANSI/windows 1252. __
cliquez sur la référence suivante donne ce lien
http://www.w3schools.com/charsets/ref_html_8859.asp
les codes de 128 à 159 ne sont pas utilisés dans la norme ISO-8859-1, mais plusieurs les navigateurs afficher les caractères de L'ANSI (Windows-1252) jeu de caractères au lieu de rien.
ces 2 liens les énumèrent tous les deux.
Ce tableau donne une vue d'ensemble sur les différences. Il affiche tous les caractères définis dans Windows-1252 mais non disponibles EN ISO-8859-1/ISO-8859-15:
│ …0 │ …1 │ …2 │ …3 │ …4 │ …5 │ …6 │ …7 │ …8 │ …9 │ …A │ …B │ …C │ …D │ …E │ …F │
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
8… │ € │ │ ‚ │ ƒ │ „ │ … │ † │ ‡ │ ˆ │ ‰ │ Š │ ‹ │ Œ │ │ Ž │ │
Unicode │ 20AC │ │ 201A │ 0192 │ 201E │ 2026 │ 2020 │ 2021 │ 02C6 │ 2030 │ 0160 │ 2039 │ 0152 │ │ 017D │ │
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
9… │ │ ‘ │ ’ │ “ │ ” │ • │ – │ — │ ˜ │ ™ │ š │ › │ œ │ │ ž │ Ÿ │
Unicode │ │ 2018 │ 2019 │ 201C │ 201D │ 2022 │ 2013 │ 2014 │ 02DC │ 2122 │ 0161 │ 203A │ 0153 │ │ 017E │ 0178 │
contrairement à Windows-1252 gamme 0x80...0x9F est utilisé pour Codes De Contrôle dans la norme ISO-8859-1.
Character │ € │ Š │ š │ Ž │ ž │ Œ │ œ │ Ÿ │ ¤ │ ¦ │ ¨ │ ´ │ ¸ │ ¼ │ ½ │ ¾ │
───────────────────────────────────────────────────────────────────────────────────────────────────────
ISO 8859-1 │ – │ – │ – │ – │ – │ – │ – │ – │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │
ISO 8859-15 │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │ – │ – │ – │ – │ – │ – │ – │ – │
Windows-1252 │ 80 │ 8A │ 9A │ 8E │ 9E │ 8C │ 9C │ 9F │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │
Unicode │ 20AC │ 160 │ 161 │ 17D │ 17E │ 152 │ 153 │ 178 │ A4 │ A6 │ A8 │ B4 │ B8 │ BC │ BD │ BE │