Je voulais rembourrer une chaîne avec des caractères nuls ("\ x00"). Je sais beaucoup de façons de le faire, alors veuillez ne pas répondre avec des alternatives. Ce que je veux savoir, c'est que: pourquoi fonctionne cas de test: p> Cela montre que des caractères échappés hexagonaux fonctionnent en général. P> mais "\ x00" est transformé en espace ("\ x20"). P> >>> spaces = "{0: <10}".format("bbb")
>>> nulls = "{0:\x00<10}".format("bbb")
>>> spaces == nulls
True
3 Réponses :
Parce que la méthode Que je suppose que la réponse est que c'est trop pratique pour l'avoir là. P>
Comme une question connexe, pourquoi il n'y a pas string.format code> in python2.7 est un port arrière de Python3
string.format code>. Python2.7 Unicode est la chaîne Python 3, où la chaîne Python2.7 est les octets Python3. Une chaîne est le mauvais type pour exprimer des données binaires dans Python3. Vous utiliseriez des octets qui n'ont pas de méthode de format. Donc, vous devriez vraiment demander pourquoi est le format code> de la méthode code> sur la chaîne du tout en 2.7 lorsqu'il aurait dû vraiment seulement été sur le type Unicode, car c'est ce qui est devenu la chaîne de Python3. P>
Format CODE> SUR BYTES
Pourtant < / p>
Cela donne le même résultat: u "{0: \ x00 <10}". Format (U "BBB") code>. Le code source indique que les types d'unicode et de chaîne utilisent le même formateur.
@bonsaivier Oui, le point est que .format code> n'est pas pour les données binaires et ne doit pas être utilisé pour des données binaires. Essayer d'utiliser la méthode Unicode pour les données binaires ne va pas bien fonctionner.
creuser dans le code source de Python 2.7, j'ai constaté que le problème est dans cette section à partir de ./ Objets / StringLib / Formatter.h code>, lignes 718-722 (dans la version 2.7.3) :
>>> "{0:<10}".format("foo")
'foo '
La réponse à la question initiale est que c'était un bogue dans Python. P>
Il a été documenté comme autorisé, mais n'était pas. Il a été corrigé en 2014. Pour Python 2, le correctif est apparu pour la première fois en 2.7.7 ou 2.7.8 (je ne suis pas sûr de savoir comment) P>
original suivi problème . p>
S'il vous plaît laissez un commentaire lorsque vous avez bowvote afin que je puisse améliorer cette question. J'ai fait mes recherches et connaissez sur
LJUST code> et d'autres moyens d'accomplir la tâche. Je veux savoir pourquoi Python 2.7 se comporte de cette façon.
Utilisez
Imprimer "BBB" + "\ x00" * 7 code> et vous obtiendrez une chaîne avec 7 espaces. Shell Imprimez toujours "\ x00" comme caractère d'espace. Sans tirage d'impression renvoie la version
REC code> de la chaîne.