Convertir les caractères UTF-8 en ISO-8859-1 manuellement
J'ai le caractère "...". Si je regarde dans cette UTF-8 tableau je vois qu'il a la valeur hexadécimale F6
. Si je regarde dans le Tableau Unicode je vois que "ö" a les indices E0
et 16
. Si j'ajoute les deux-je obtenir la valeur hexadécimale du code de point de F6
. C'est la valeur binaire 1111 0110
.
1) Comment puis-je obtenir à partir de la valeur hexadécimale F6
les indices E0
et 16
?
2) je ne sais pas comment venir à partir de F6
pour les deux octets C3
B6
...
Parce que je n'ai pas encore eu les résultats, j'ai essayé d'aller dans l'autre sens. "ö" est représenté dans la norme ISO-8859-1 "ö". Dans le UTF-8 tableau je peux voir que "Ã" a la valeur décimale 195
et "¶" a la valeur décimale 182
. Converti bits c'est 1100 0011 1011 0110
.
Processus:
- Regarder dans un table et obtenir de l'unicode pour les caractères "ö". Calculé à partir des indices
E0
et16
vous obtenez l'UnicodeU+00F6
. - Selon l'algorithme posté par wildplasser vous pouvez calculer le codés en UTF-8 valeur
C3
etB6
. - Dans la forme binaire, vous obtenez
1100 0011 1011 0110
qui correspond aux valeurs décimales195
et182
. - Si ces valeurs sont interprétées comme des ISO 8859-1 (1 octet), puis vous obtenez "ö".
PS: j'ai trouvé aussi ce lien, qui indique les valeurs à partir de l'étape 2.
Vous trouverez beaucoup plus facile si vous allez par le biais de l'UTF-16. En UTF-8, vous avez E0/16. Cette fonction convertit à F6 selon l'UTF-8 de l'algorithme. Vous regardez en haut U+00F6 dans la norme ISO-8859-1 table, qui correspond à la position de la touche F6.
Si je sais une direction à l'autre ne devrait pas être un problème je pense. Parce que je n'ai pas obtenu le résultat souhaité avec le premier essai, j'ai fait un autre essai (l'inverse). Non j'ai édité ma question et a ajouté de la valeur binaire du point de code. Mais comment puis-je l'interpréter en Latin1 maintenant? @RaymondChen: C'est l'ISO-8859-1 table que j'utilise. Mais actuellement, je ne sais pas comment faire pour les deux octets
C3
et B6
.ö en Latin-1 "n'est pas représenté comme ö". ö en Latin-1 est représenté à l'aide de l'octet 0xF6, ou
1111 0110
. Si vous interpréter UTF-8 séquence d'octets pour la..., à savoir 0xC3B6 (1100 0011 1011 0110
) en Latin-1, vous obtenez les deux personnages à (0xC3) et ¶ (0xB6) du codage Latin-1. Puis-je recommander Ce que Chaque Programmeur Absolument Besoin De Savoir Sur les Codages Et les Jeux de Caractères Pour Travailler Avec du Texte (pas le même que liés par @Avi)?OriginalL'auteur testing | 2011-10-26
Vous devez vous connecter pour publier un commentaire.
Les pages que vous utilisez sont en train de vous confondre quelque peu. Ni votre "UTF-8" ou "tableau Unicode" vous donne la valeur du point de code en UTF-8. Ils sont à la fois simplement en indiquant la valeur Unicode du caractère.
En Unicode, chaque personnage ("code") est un numéro unique attribué à elle. Le caractère
ö
est attribué le point de codeU+00F6
, qui estF6
en hexadécimal, et246
en décimal.UTF-8 est un la représentation de l'Unicode, à l'aide d'une séquence d'un à quatre octets par des points de code Unicode. La transformation de 32 bits points de code Unicode UTF-8 séquences d'octets est décrit dans cet article - il est assez simple à faire, une fois que vous vous habituez à elle. Bien sûr, les ordinateurs font tout le temps, mais vous pouvez le faire avec un crayon et du papier, et dans votre tête avec un peu de pratique.
Si vous n'avez que de la transformation, vous verrez que
U+00F6
transforme à l'UTF-8 séquenceC3 B6
, ou1100 0011 1011 0110
en binaire, c'est pourquoi c'est de l'UTF-8 représentation deö
.L'autre moitié de votre question est à propos de l'ISO-8859-1. C'est un codage de caractères communément appelé "Latin-1". Les valeurs numériques de codage Latin-1 sont les mêmes que les 256 premiers points de code Unicode, donc
ö
estF6
en Latin-1.Une fois que vous avez converti entre UTF-8 et standard des points de code Unicode (UTF-32), il doit être facile à obtenir le codage Latin-1. Cependant, pas toutes les séquences UTF-8 /Unicode des caractères correspondant à des caractères Latin-1.
Voir l'excellent article Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!) pour une meilleure compréhension de l'encodage des caractères et des transformations entre eux.
OriginalL'auteur Avi
Pour le tester:
Le résultat:
F6
en entrée (cha) et crée le MSBC3
et LSBB6
. Alors maintenant, je peux calculer dans l'autre sens aussi.Oui, il est travail C de code. Pour le tester, il suffit de brancher votre F6 valeur dans le "cha' argument et voir ce qui se passe. Vous pouvez le faire dans votre tête ou sur le papier. Le résultat devrait être votre E0 et 16 valeurs.
En fait, il n'était pas (encore) de travail, parce que j'ai coupé une ligne trop peu.
Je n'ai pas tester, mais j'ai joué avec elle à l'esprit. Donc, la question n'. 2 est répondu. Quid de la question no. 1? Est-il ou est-il un algorithme comme mentionné de Raymond? Peut les indices seront calculés (entrée F6, sortie E0 et 16) ou est-il une table de recherche?
Le E0 et 16 valeurs sont seulement les intermédiaires, l'original F6 valeur split dans la partie supérieure 3 et inférieure de 5 bits. La partie supérieure (MSB) 3 bits sont décalés vers le bas et deviennent des 3 et sont combinés avec la constante C0, la droite, 5 (en fait 6, mais le plus grand bit est égal à zéro) les bits sont ou souhaitez avec l'0x80 masque.
OriginalL'auteur wildplasser