බාහිර වැඩසටහනකින් සම්මත ප්රතිදානය ලබා ගැනීමට මම මෙම කේතය භාවිතා කරමි:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
සන්නිවේදන () ක්රමය මඟින් බයිට් සමූහයක් ලබා දෙයි:
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
කෙසේ වෙතත්, සාමාන්ය පයිතන් නූලක් ලෙස ප්රතිදානය සමඟ වැඩ කිරීමට මම කැමතියි. ඒ නිසා මට එය මේ ආකාරයෙන් මුද්රණය කළ හැකිය:
>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
මම සිතුවේ එය binascii.b2a_qp () ක්රමය සඳහා බවයි, නමුත් මම එය උත්සාහ කළ විට, මට නැවතත් එම බයිට් අරා ලැබුණි:
>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
බයිට් අගය නැවත නූල් බවට පරිවර්තනය කරන්නේ කෙසේද? මම අදහස් කළේ, එය අතින් කිරීම වෙනුවට "බැටරි" භාවිතා කිරීමයි. පයිතන් 3 සමඟ එය හොඳින් වීමට මම කැමතියි.
str(text_bytes)
කේතන ක්රමය නියම කළ නොහැක. පෙළ_බයිට් වල ඇති දේ මත පදනම්ව, text_bytes.decode('cp1250
) ` ප්රති to ලය විය හැක්කේ ඊට වඩා වෙනස් නූලකි text_bytes.decode('utf-8')
.
str
ශ්රිතය තවදුරටත් සැබෑ නූලකට පරිවර්තනය නොවේ. කිසියම් හේතුවක් නිසා කේතන ක්රමයක් පැහැදිලිව පැවසීමට එක් අයෙක් මට හේතුව කියවීමට කම්මැලි ය. එය පරිවර්තනය කර utf-8
ඔබේ කේතය ක්රියාත්මක වේදැයි බලන්න. උදාvar = var.decode('utf-8')
unicode_text = str(bytestring, character_encoding)
පයිතන් 3 හි අපේක්ෂා කළ පරිදි ක්රියා කරයි. එය පෙළට විකේතනය කිරීම වෙනුවට පෙළ නිරූපණයක් නිපදවන unicode_text = bytestring.decode(character_encoding)
යන්තම් str(bytes_obj)
ඇති වියවුල්සහගත තත්ත්වය වළක්වා ගැනීම වඩා සුදුසු ය bytes_obj
: str(b'\xb6', 'cp1252') == b'\xb6'.decode('cp1252') == '¶'
සහstr(b'\xb6') == "b'\\xb6'" == repr(b'\xb6') != '¶'
str(text_bytes)
වැඩ කරන්නේ නැත්තේ ? මෙය මට විකාරයකි.