كيف يمكنك تخزين بايت الخام كنص دون فقدان المعلومات في 2.x الثعبان؟

StackOverflow https://stackoverflow.com/questions/840981

سؤال

لنفترض لدي أي البيانات المخزنة في بايت. على سبيل المثال:

<اقتباس فقرة>   

و0110001100010101100101110101101

وكيف يمكنني تخزينه ك <م> طباعة النص؟ ان طريقة واضحة تتمثل في تحويل كل 0 إلى الحرف "0" وكل 1 إلى الحرف "1". في الواقع هذا هو ما أقوم به حاليا. أود أن أعرف كيف يمكن أن حزمة لهم أكثر إحكاما، دون فقدان المعلومات.

وفكرت في تحويل بت في مجموعات من ثمانية إلى ASCII، ولكن بعض تركيبات قليلا ليسوا يقبل في هذا الشكل. أي أفكار أخرى؟

هل كانت مفيدة؟

المحلول

وماذا عن ترميز يستخدم فقط الأحرف "آمنة" مثل base64 في منتديات http://en.wikipedia.org/wiki/Base64

وتحرير: وهذا على افتراض أن كنت تريد تخزين البيانات في ملفات نصية وأمان مثل

في بيثون الإصدار 2.x، ينبغي أن يكون على ما يرام سلاسل (بايثون لا تستخدم إنهاء اغية السلاسل، لذلك لا تقلق بشأن ذلك).

وآخر في 3.X تحقق من وحدات البايت والأشياء bytearray. http://docs.python.org/3.0/library/stdtypes. أتش تي أم أل # بايت-طرق

نصائح أخرى

وبالتأكيد ليس ما نتحدث عنه.

>>> sample = "".join( chr(c) for c in range(256) )
>>> len(sample)
256
>>> sample
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\
x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABC
DEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83
\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97
\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab
\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf
\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3
\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7
\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb
\xfc\xfd\xfe\xff'

ووsample سلسلة تحتوي على كافة بايت متميزة 256. لا يوجد شيء من هذا القبيل بأنها "مزيج قليلا ... لم يقبل".

لجعله <م> طبع ، لمجرد استخدام repr(sample) - وهرب أحرف غير ASCII. كما ترون أعلاه.

وحاول معيار <م> مجموعة وحدة أو <م> البنية وحدة. تخزين بايت بطريقة فعالة مساحة هذه الدعم - لكنها لا تدعم بت مباشرة

ويمكنك أيضا محاولة HTTP: //cobweb.ecn. purdue.edu/~kak/dist/BitVector-1.2.html أو HTTP: //ilan.schnell-web.net/prog/bitarray/

لبيثون الإصدار 2.x، وأفضل رهان هو لتخزينها في سلسلة. وبمجرد الانتهاء من هذه السلسلة، يمكنك صياغته إلى قيم ASCII آمنة باستخدام وحدة base64 في أن يأتي مع الثعبان.

import base64
encoded = base64.b64encode(bytestring)

وسوف أكثر من ذلك بكثير مكثف هذا من تخزين "1" و "0".

لمزيد من المعلومات حول وحدة base64 في، راجع الثعبان مستندات .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top