Je ne comprends pas d'encoder et de décoder en Python (2.7.3)
J'ai essayé de comprendre par moi-même encode
et decode
en Python mais rien n'est vraiment clair pour moi.
str.encode([encoding,[errors]])
str.decode([encoding,[errors]])
Tout d'abord, je ne comprends pas la nécessité de le "codage" de paramètre dans ces deux fonctions.
Qu'est-ce que la sortie de chaque fonction, son encodage? Qu'est-ce que l'utilisation du "codage" paramètre dans chaque fonction? Je ne comprends pas vraiment la définition de "octets chaîne de caractères".
J'ai une question importante, est-il possible de passer d'un codage à l'autre?
J'ai lu un texte sur l'ASN.1 à propos de "octuor à cordes", donc je me demandais si c'était le même que "octets chaîne de caractères".
Merci pour votre aide.
OriginalL'auteur Narcisse Doudieu Siewe | 2012-07-21
Vous devez vous connecter pour publier un commentaire.
C'est un peu plus complexe en Python 2 (par rapport à Python 3), puisqu'il regroupe les concepts de "chaîne" et "bytestring' un peu, mais voir Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères. Essentiellement, ce que vous devez comprendre, c'est que la "chaîne" et "caractère" sont des concepts abstraits qui ne peuvent pas être directement représentés par un ordinateur. Un bytestring est raw d'un flux d'octets à droite à partir de la disquette (ou qui peuvent être écrits directement à partir du disque).
encode
va de l'abstrait au concret (vous lui donnez de préférence une chaîne unicode, et il vous donne en retour une chaîne d'octets);decode
va à l'opposé.L'encodage est la règle qui dit que " a " devrait être représenté par l'octet
0x61
et 'α' par les deux octets de la séquence0xc0\xb1
.peut-on octet dans une "octets de la chaîne de" soutien à un plus?
pour la première question, oui, c'est exact, bien que la terminologie est un peu mélangé - le "codage" est en ASCII, pas de la version finale bytestring - ce qu'on pourrait appeler "un ascii chaîne codée", par exemple. Pour la deuxième question, un élément d'une bytestring est un élément de chaîne d'octets (en Py2, un bytestring est juste le
str
type, et une chaîne de caractères est leunicode
type), de sorteb[0] + b[0]
ne concaténation. Ce qui est différent dans Py3, où un élément d'un bytestring est en fait unint
et doncb[0] + b[0]
n'int plus.🙂 Je suppose que la "chaîne d'octets" et "bytestring" ne sont pas les mêmes parce que sur cette page web: docs.python.org/library/codecs.html après "7.8.3 norme d'encodage" et entre la première et la deuxième table d'encodage, il est clairement mentionné " Pour les codecs de la liste ci-dessous, le résultat, le “codage” de la direction est toujours une chaîne d'octets.". Merci pour votre aide à propos de toutes mes questions
Je veux savoir quelque chose, en ce moment j'utilise python ctypes de faire quelques wifi à la structure du cadre et avec lorcon2 je pourrais les envoyer à travers le réseau local. J'ai envie de transformer cette structure en chaîne pour obtenir une représentation hexadécimale de cette structure. J'ai vu dans ce but, deux fonctions qui permettent d'accomplir cela. le ctypes.string_at et ctypes.wstring_at fonctions. Je sais que ctypes.wstring_at est pour faire une chaîne unicode, mais ctypes.string_at est pour ??? quel genre de string, pourrions-nous avoir avec elle?? une chaîne de caractères ascii?? ou une chaîne hexadécimale??
OriginalL'auteur lvc
Ma présentation de PyCon, Pragmatique Unicode, ou, Comment puis-je Arrêter La Douleur couvre tous ces détails.
Brièvement, des chaînes Unicode sont des séquences d'entiers appelés points de code, et bytestrings sont des séquences d'octets. Un codage est un moyen de représenter des points de code Unicode comme une série d'octets. Donc
unicode_string.encode(enc)
sera le retour de la chaîne d'octets de la chaîne Unicode codés avec "enc", etbyte_string.decode(enc)
renverra la chaîne Unicode créé par le décodage de la chaîne d'octets avec "enc".OriginalL'auteur Ned Batchelder
Python 2.x dispose de deux types de chaînes:
str
= "chaînes d'octets" = une séquence d'octets. Ceux-ci sont utilisés à la fois pour "l'héritage" des codages de caractères (comme windows-1252 ou IBM437) et pour des données binaires brutes (commestruct.pack
de sortie).unicode
= "Unicode" = une séquence de UTF-16 ou UTF-32 selon la façon Python est construit.Ce modèle a été changé pour Python 3.x:
unicode
est devenu de 3.xstr
(et leu
préfixe a été abandonné à partir de la littéraux).bytes
type a été introduit pour la représentation des données binaires.Un l'encodage des caractères est un mappage entre des chaînes Unicode et les chaînes d'octets. Pour convertir une chaîne Unicode, à une chaîne d'octets, utilisez le
encode
méthode:À convertir dans l'autre sens, l'utilisation de la
decode
méthode:OriginalL'auteur dan04
Oui, une chaîne d'octets est une chaîne d'octets. L'encodage et le décodage se produit lors de l'entrée /de la sortie de texte (à partir de/à la console, les fichiers, le réseau, ...). Votre console peut utiliser l'UTF-8 en interne, votre serveur web sert latin-1, et de certains formats de fichiers besoin étrange encodages comme Bibtex accents:
fran\c{c}aise
. Vous avez besoin de convertir à partir de/à en entrée/sortie.La
{en|de}code
méthodes de le faire. Ils sont souvent appelés les coulisses (par exemple,print "hello world"
code de la chaîne quel que soit votre terminal utilise).OriginalL'auteur tiwo