C'est une question de noob, mais je veux savoir pourquoi il existe différents types de codage et quelles sont leurs différences (ie. ASCII, utf-8 et 16, base64, etc.)
Raisons sont nombreuses, je crois, mais le point principal est: "Combien de caractères à afficher (coder)?" Si vous vivez en NOUS par exemple, vous pourrait aller assez loin avec ASCII. Mais dans de nombreux comtés nous avons besoin de caractères comme ä, å, ü etc. (Si tel était ASCII ou que vous essayez de lire ce texte comme texte codé en ASCII, vous pouvez voir certains des caractères bizarres dans les lieux, ä, å, et ü.) Pense aussi à la Chine, le Japon, la Thaïlande et d'autres "exotiques" pays. Ces étranges figures sur les photos que vous avez vu à travers le monde pourraient être des lettres, pas de jolies photos.
Comme pour les différences entre les différents types d'encodage vous avez besoin de voir leur cahier des charges. Voici quelque chose pour l'UTF-8.
Base64 est utilisé quand il ya un besoin pour coder des données binaires qui doivent être stockées et transférées sur les médias qui sont conçus pour traiter les données textuelles. Si vous avez déjà fait somesort de système de mail avec PHP, vous avez probablement rencontré Base64.
Est court: Pour soutenir le programme de l'ordinateur de l'utilisateur de l'interface localisations de nombreuses langues différentes. (Langages de programmation, encore essentiellement composé de caractères au format ASCII, bien qu ' il est possible, par exemple, en Java pour utiliser l'encodage UTF-8 dans les noms de variable, et le fichier de code source est généralement stocké en tant que quelque chose d'autre que texte codé en ASCII, par exemple l'encodage UTF-8.)
En bref vol.2: Toujours lorsque différentes personnes essayons de résoudre un problème à partir d'un certain point de vue (ou même sans point de vue, si c'est encore possible), les résultats peuvent être très différents. Citation de Joël unicode article (lien ci-dessous): "Parce que les octets de la place pour jusqu'à huit bits, beaucoup de gens se sont mis à penser "bon sang, on peut utiliser les codes 128 à 255 pour nos propres fins." Le problème a été, beaucoup de gens ont eu cette idée en même temps, et ils avaient leurs propres idées de ce qui doit aller où dans l'espace, de 128 à 255."
Merci à Joachim et tchrist pour toutes ces infos et de discussions. Voici deux articles que je viens de lire. (Les deux liens sont sur la page, j'ai lié à l'heure.) J'avais oublié la plupart des choses de Joël article depuis la dernière fois que j'ai lu il y a quelques années. Bonne introduction sur le sujet, je l'espère. Mark Davis va un peu plus loin.
Désolé, cette réponse ne contient que de nombreuses parties incorrectes: UTF-16 ans ne peuvent pas représenter plus de caractères que l'UTF-8, parce que les deux d'entre eux peuvent représenter tous de caractères Unicode. ASCII est rarement utilisé pour le code source de Java, UTF-8 ou ISO-8859-* variante sont plus fréquentes (même si elle n'a souvent pas de faire une différence, parce que le code ne contient que de l'ASCII encodable caractères). Il convient également de noter que Base64 est pas codage de caractère à tous! C'est une manière de représenter des données binaires dans une forme textuelle. Je vous remercie pour votre contribution. J'ai édité ma réponse. Pas sûr de savoir comment interpréter la Java partie de votre commentaire. Je voulais dire (et de la pensée que j'ai écrit) que le code source est le code ASCII (mots réservés, en fonction des noms, la langue de construire), mais le fichier lui-même est quelque chose d'autre. Par exemple, mon PHP les fichiers sont encodés en UTF-8, mais les balises HTML et du code PHP se compose de caractères ASCII. Cela ne comprend pas c'est à dire l'écho des chaînes et d'autres textes visibles pour l'utilisateur final (c'est pourquoi j'ai besoin d'utiliser l'UTF-8 en premier lieu). S'il vous plaît commentaire pour de plus amples improvemens. Java limite les caractères et symboles utilisés dans le langage de spécification pour ceux représentable en ASCII. Mais cela ne signifie pas que le code source Java est automatiquement en texte ASCII. Il signifie seulement que être codé en ASCII. Je n'aime simplement pas les (un peu bâclée) l'utilisation du terme ASCII de se référer au "texte restreint ASCII-encodable caractères". ASCII, comme l'encodage du texte, est devenu incroyablement pas d'importance, mais il est cité beaucoup, sans vraie raison, sauf comme une excuse pour ne pas apprendre ce que les codages sont que sont les en fait, en usage aujourd'hui. Merci encore. Heureusement, j'ai édité tous les laisser-aller, à l'écart. Est-ce suffisant pour faire le -1 en aller ou devrais-je essayer? Je dois avouer que votre knoweledge dans ce domaine est de loin supérieure à la mienne, mais j'espère que le dernier de la incorrecness sont éditées hors de mon post.
La vraie raison pour laquelle il ya tellement de nombreuses variantes, c'est que le consortium Unicode est venu trop tard.
Au Début de la mémoire et de stockage a été coûteux et à l'aide de plus de 8 (ou, parfois, seulement 7) peu de mémoire pour stocker un caractère unique était considéré comme excessif. Ainsi, peu près tout le texte a été stocké à l'aide de 7 ou 8 bits par caractère. Clairement, 8 bits ne sont pas d'assez de mémoire pour représenter les caractères de tous langues humaines. C'est à peine suffisant pour représenter plus caractères utilisés dans une seule langue (et, pour certaines langues, même que c'est pas possible). Donc beaucoup de différents encodages de caractères où conçue pour permettre à des langues différentes (anglais, allemand, grec, russe, ...) pour coder leur textes en 8 bits par caractères. Après tout, un simple fichier texte (et souvent même d'un seul système informatique) ne sera jamais utilisé dans une seule langue, droit?
Cela a conduit à une situation où il n'y a pas convenu de cartographie de caractères à des nombres de toute nature. De nombreux différents, des solutions incompatibles où il est produit, et pas de réel contrôle central existé. Certains systèmes informatiques utilisés ASCII, d'autres ont utilisé EBCDIC (ou plus précisément: une des nombreuses variations de EBCDIC), ISO-8859-* (ou l'un de ses nombreux dérivés) ou d'une grande liste de codages qui sont à peine entendu parler maintenant.
Enfin, le Consortium Unicode a intensifié à la tâche pour produire que seule la cartographie (avec beaucoup de données auxiliaires utiles, mais à l'extérieur des limites de cette réponse).
Lorsque le consortium Unicode a finalement produit un assez liste complète des caractères qu'un ordinateur peut représenter (avec un certain nombre de schémas de codage pour coder en binaire de données, en fonction de vos besoins concrets), l'autre personnage systèmes de codage ont été déjà largement utilisé. Cela a ralenti l'adoption de l'Unicode et ses jeux de caractères (UTF-8, UTF-16) considérablement.
Ces jours, si vous voulez représenter un texte, votre meilleur pari est d'utiliser l'un des quelques encodages que peut représenter tous les caractères Unicode. UTF-8 et UTF-16 ensemble devrait suffire pour 99% de tous les cas d'utilisation, UTF-32 couvre presque tous les autres. Et juste pour être clair: tous les UTF-* encodages peut encoder valide tous les caractères Unicode. Mais en raison du fait que l'UTF-8 et UTF-16 sont de largeur variable encodages, ils pourraient ne pas être idéal pour tous les cas d'utilisation. Sauf si vous avez besoin d'être capable d'interagir avec un système d'héritage qui ne peut pas gérer ces encodages, il y a rarement une raison de choisir autre chose ces jours-ci.
Ceci est incorrect. Tous les trois de l'UTF-{8,16,32} peut représenter précisément de 100,00% de l'ensemble juridique de l'Unicode des valeurs scalaires. Ce UTF-16 ne peut pas représenter est les mères porteuses, qui ne sont pas légales Unicode valeurs scalaires. L'UTF-{8,32} algorithmes peuvent représenter les mêmes valeurs, mais celles-ci sont explicitement interdit de occurrring dans un conforme flux dans l'un de ces codages. Cela garantit tous les droits légaux des points de code peuvent être librement échangés dans toute l'UTF-{8,16,32}. Je ne veux pas dire que l'UTF-32 peut en quelque sorte représenter plus de caractères, mais que, dans certains cas d'utilisation de sa largeur fixe propriétés sont nécessaires (par exemple, si vous avez absolument besoin de O(1) indexation dans une chaîne Unicode). Dans ces cas, UTF-32 est une bonne solution, où UTF-8 et UTF-16 ne suffirait pas.
La raison principale est de pouvoir afficher plus de caractères. Lorsque l'internet a été dans son enfance, personne n'a vraiment planifié à l'avance en pensant qu'un jour il y aurait des gens à l'utiliser à partir de tous les pays et toutes les langues du monde entier. Donc un petit jeu de caractères a été assez bon. Peu à peu, il a été révélé être limitée et en anglais-centric, la demande pour les plus gros jeux de caractères.
ahhh, juste pour prendre en charge les caractères d'autres langues, merci Je dirais que "l'utilisation de l'ordinateur" au lieu de "internet". Les gens veulent utiliser des programmes informatiques (Word, Photoshop, Thunderbird, peu importe) dans leur langue maternelle. J'ai édité ma réponse (une fois de plus) pour le stress de la localisation du point. Ce que vous avez écrit est complètement faux. Unicode est d'environ beaucoup plus que les “non-anglais” de caractères. Il comprend de nombreux spécialistes, les caractères utilisés par les compositeurs et correcteurs, des mathématiciens et des physiciens, des linguistes et lexicographes — même à 100% de langue anglaise du texte.
Raisons sont nombreuses, je crois, mais le point principal est: "Combien de caractères à afficher (coder)?" Si vous vivez en NOUS par exemple, vous pourrait aller assez loin avec ASCII. Mais dans de nombreux comtés nous avons besoin de caractères comme ä, å, ü etc. (Si tel était ASCII ou que vous essayez de lire ce texte comme texte codé en ASCII, vous pouvez voir certains des caractères bizarres dans les lieux, ä, å, et ü.) Pense aussi à la Chine, le Japon, la Thaïlande et d'autres "exotiques" pays. Ces étranges figures sur les photos que vous avez vu à travers le monde pourraient être des lettres, pas de jolies photos.
Comme pour les différences entre les différents types d'encodage vous avez besoin de voir leur cahier des charges. Voici quelque chose pour l'UTF-8.
Je ne suis pas familier avec UTF-16. Voici quelques informations sur les différences.
Base64 est utilisé quand il ya un besoin pour coder des données binaires qui doivent être stockées et transférées sur les médias qui sont conçus pour traiter les données textuelles. Si vous avez déjà fait somesort de système de mail avec PHP, vous avez probablement rencontré Base64.
Est court: Pour soutenir le programme de l'ordinateur de l'utilisateur de l'interface localisations de nombreuses langues différentes. (Langages de programmation, encore essentiellement composé de caractères au format ASCII, bien qu ' il est possible, par exemple, en Java pour utiliser l'encodage UTF-8 dans les noms de variable, et le fichier de code source est généralement stocké en tant que quelque chose d'autre que texte codé en ASCII, par exemple l'encodage UTF-8.)
En bref vol.2: Toujours lorsque différentes personnes essayons de résoudre un problème à partir d'un certain point de vue (ou même sans point de vue, si c'est encore possible), les résultats peuvent être très différents. Citation de Joël unicode article (lien ci-dessous): "Parce que les octets de la place pour jusqu'à huit bits, beaucoup de gens se sont mis à penser "bon sang, on peut utiliser les codes 128 à 255 pour nos propres fins." Le problème a été, beaucoup de gens ont eu cette idée en même temps, et ils avaient leurs propres idées de ce qui doit aller où dans l'espace, de 128 à 255."
Merci à Joachim et tchrist pour toutes ces infos et de discussions. Voici deux articles que je viens de lire. (Les deux liens sont sur la page, j'ai lié à l'heure.) J'avais oublié la plupart des choses de Joël article depuis la dernière fois que j'ai lu il y a quelques années. Bonne introduction sur le sujet, je l'espère. Mark Davis va un peu plus loin.
Je vous remercie pour votre contribution. J'ai édité ma réponse. Pas sûr de savoir comment interpréter la Java partie de votre commentaire. Je voulais dire (et de la pensée que j'ai écrit) que le code source est le code ASCII (mots réservés, en fonction des noms, la langue de construire), mais le fichier lui-même est quelque chose d'autre. Par exemple, mon PHP les fichiers sont encodés en UTF-8, mais les balises HTML et du code PHP se compose de caractères ASCII. Cela ne comprend pas c'est à dire l'écho des chaînes et d'autres textes visibles pour l'utilisateur final (c'est pourquoi j'ai besoin d'utiliser l'UTF-8 en premier lieu). S'il vous plaît commentaire pour de plus amples improvemens.
Java limite les caractères et symboles utilisés dans le langage de spécification pour ceux représentable en ASCII. Mais cela ne signifie pas que le code source Java est automatiquement en texte ASCII. Il signifie seulement que être codé en ASCII.
Je n'aime simplement pas les (un peu bâclée) l'utilisation du terme ASCII de se référer au "texte restreint ASCII-encodable caractères". ASCII, comme l'encodage du texte, est devenu incroyablement pas d'importance, mais il est cité beaucoup, sans vraie raison, sauf comme une excuse pour ne pas apprendre ce que les codages sont que sont les en fait, en usage aujourd'hui.
Merci encore. Heureusement, j'ai édité tous les laisser-aller, à l'écart. Est-ce suffisant pour faire le -1 en aller ou devrais-je essayer? Je dois avouer que votre knoweledge dans ce domaine est de loin supérieure à la mienne, mais j'espère que le dernier de la incorrecness sont éditées hors de mon post.
OriginalL'auteur
La vraie raison pour laquelle il ya tellement de nombreuses variantes, c'est que le consortium Unicode est venu trop tard.
Au Début de la mémoire et de stockage a été coûteux et à l'aide de plus de 8 (ou, parfois, seulement 7) peu de mémoire pour stocker un caractère unique était considéré comme excessif. Ainsi, peu près tout le texte a été stocké à l'aide de 7 ou 8 bits par caractère. Clairement, 8 bits ne sont pas d'assez de mémoire pour représenter les caractères de tous langues humaines. C'est à peine suffisant pour représenter plus caractères utilisés dans une seule langue (et, pour certaines langues, même que c'est pas possible). Donc beaucoup de différents encodages de caractères où conçue pour permettre à des langues différentes (anglais, allemand, grec, russe, ...) pour coder leur textes en 8 bits par caractères. Après tout, un simple fichier texte (et souvent même d'un seul système informatique) ne sera jamais utilisé dans une seule langue, droit?
Cela a conduit à une situation où il n'y a pas convenu de cartographie de caractères à des nombres de toute nature. De nombreux différents, des solutions incompatibles où il est produit, et pas de réel contrôle central existé. Certains systèmes informatiques utilisés ASCII, d'autres ont utilisé EBCDIC (ou plus précisément: une des nombreuses variations de EBCDIC), ISO-8859-* (ou l'un de ses nombreux dérivés) ou d'une grande liste de codages qui sont à peine entendu parler maintenant.
Enfin, le Consortium Unicode a intensifié à la tâche pour produire que seule la cartographie (avec beaucoup de données auxiliaires utiles, mais à l'extérieur des limites de cette réponse).
Lorsque le consortium Unicode a finalement produit un assez liste complète des caractères qu'un ordinateur peut représenter (avec un certain nombre de schémas de codage pour coder en binaire de données, en fonction de vos besoins concrets), l'autre personnage systèmes de codage ont été déjà largement utilisé. Cela a ralenti l'adoption de l'Unicode et ses jeux de caractères (UTF-8, UTF-16) considérablement.
Ces jours, si vous voulez représenter un texte, votre meilleur pari est d'utiliser l'un des quelques encodages que peut représenter tous les caractères Unicode. UTF-8 et UTF-16 ensemble devrait suffire pour 99% de tous les cas d'utilisation, UTF-32 couvre presque tous les autres. Et juste pour être clair: tous les UTF-* encodages peut encoder valide tous les caractères Unicode. Mais en raison du fait que l'UTF-8 et UTF-16 sont de largeur variable encodages, ils pourraient ne pas être idéal pour tous les cas d'utilisation. Sauf si vous avez besoin d'être capable d'interagir avec un système d'héritage qui ne peut pas gérer ces encodages, il y a rarement une raison de choisir autre chose ces jours-ci.
Je ne veux pas dire que l'UTF-32 peut en quelque sorte représenter plus de caractères, mais que, dans certains cas d'utilisation de sa largeur fixe propriétés sont nécessaires (par exemple, si vous avez absolument besoin de O(1) indexation dans une chaîne Unicode). Dans ces cas, UTF-32 est une bonne solution, où UTF-8 et UTF-16 ne suffirait pas.
OriginalL'auteur
La raison principale est de pouvoir afficher plus de caractères. Lorsque l'internet a été dans son enfance, personne n'a vraiment planifié à l'avance en pensant qu'un jour il y aurait des gens à l'utiliser à partir de tous les pays et toutes les langues du monde entier. Donc un petit jeu de caractères a été assez bon. Peu à peu, il a été révélé être limitée et en anglais-centric, la demande pour les plus gros jeux de caractères.
Je dirais que "l'utilisation de l'ordinateur" au lieu de "internet". Les gens veulent utiliser des programmes informatiques (Word, Photoshop, Thunderbird, peu importe) dans leur langue maternelle. J'ai édité ma réponse (une fois de plus) pour le stress de la localisation du point.
Ce que vous avez écrit est complètement faux. Unicode est d'environ beaucoup plus que les “non-anglais” de caractères. Il comprend de nombreux spécialistes, les caractères utilisés par les compositeurs et correcteurs, des mathématiciens et des physiciens, des linguistes et lexicographes — même à 100% de langue anglaise du texte.
OriginalL'auteur