كيف يمكنك تخزين بايت الخام كنص دون فقدان المعلومات في 2.x الثعبان؟
-
20-08-2019 - |
سؤال
لنفترض لدي أي البيانات المخزنة في بايت. على سبيل المثال:
<اقتباس فقرة>و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 في، راجع الثعبان مستندات .