문자열으로 변환하십시오 바이트

39, m 이 코드를 사용하여 표준 출력입니다 i& afaq 외부 프로그램:

>>> 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'

그러나 I&; d like to # 39 로 출력물에는 작동합니까 표준 파이썬 구체화하십시오. 내가 이를 출력할 수 있도록 다음과 같습니다.

>>> 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

39 의 생각해봤죠 that& 무너지잖아! [binascii.b2a_qp ()] [1] 방법을 사용할 수 있지만, 이 때, 나는 attaboy 같은 바이트입니다 어레이입니다 다시 찾았다.

>>> 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'

How do I 변환하십시오 바이트입니다 값을 다시 구체화하십시오? 내 말은, name. domain. &quot batteries"; 대신 그렇게 합니다. # 39 와 같은 Python&amp nbsp; 3; d I& 수 있도록, 괜찮습니다.

[1]: http://docs.python.org/3.0/library/binascii.html = b2a # binascii.b2a_qp 강조표시할?

질문에 대한 의견 (3)
해결책

생산할 수 있는 바이트입니다 객체에는 문자열으로 디코딩합니다 합니다.

>>> b"abcde"
b'abcde'

# utf-8 is used here because it is a very common encoding, but you
# need to use the encoding your data is actually in.
>>> b"abcde".decode("utf-8") 
'abcde'
해설 (18)

You need to it 인되며 바이트 문자 (Unicode) 및 선반가공 문자열이어야 디코딩합니다 구체화하십시오.

파이썬 2 일

encoding = 'utf-8'
'hello'.decode(encoding)

또는

unicode('hello', encoding)

파이썬 3 일

encoding = 'utf-8'
b'hello'.decode(encoding)

또는

str(b'hello', encoding)
해설 (0)

이렇게 쉬운 것 같아요.

bytes_data = [112, 52, 52]
"".join(map(chr, bytes_data))
>> p44
해설 (12)

39 don& 모르는 경우, 파이썬 및 Python 에서 문자열을 입력할 인코딩 후 2, 3) 을 읽을 수 있는 이진 호환적 운행에서어떠한 고대 사용하여 ms-dos cp437 인코딩입니다:

PY3K = sys.version_info >= (3, 0)

lines = []
for line in stream:
    if not PY3K:
        lines.append(line)
    else:
        lines.append(line.decode('cp437'))

영어가 아닌 '의' cp437 문자로 변환할 수 있기 때문에, 앞으로 심볼에는 인코딩입니다 알 수 없습니다. (영문 번역 및 UTF-8 인코딩을 않습니다를 존재하기 때문에 대부분의 싱글바이트).

Utf-8 은 임의의 이진 대한 입력입니다 디코딩 안전하지 않은 수도 있으므로 afaq afnor:

>>> b'\x00\x01\xffsd'.decode('utf-8')
Traceback (most recent call last):
  File "", line 1, in 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 2: invalid
start byte

이는 당시 인기 (기본값입니다?) ',' latin-1 동일하게 적용됩니다. 위한 파이썬 2. [2] - [코드 페이지 레이아웃] 부족한 점을 볼 수 있는 '아닌' 여기가 파이썬 초크 범위 내에 있는 악명 높은 순서.

  • 업데이트 20150604*: 파이썬 3 은 '수호가테스카피 오류가 있다는 소문이 들린다' 를 위한 전략 및 충돌 테스트를 필요로 하고 있지만, 데이터 손실 없이 물건을 인코딩입니다 이진 데이터 변환, ' [이진] - &gt. [str] - &gt. [이진] '또한 성능 및 안정성을 검증할 수 있습니다.

  • 업데이트 20170116*: 덕분에 의해 주석문입니다 네이루 가능성도 있다. '오류' 박슬라시레프리스 처리기에서 함께 모든 알 수 없는 바이트입니다 이스케이프입니다 대폭 절감할 수 있습니다. 파이썬 대해서만 사용할 수 있는 3 도왔으매 심지어 다른 파이썬 버전을 계속 출력입니다 해결하십시오 대체하십시오 일치하지 않는 것입니다.

PY3K = sys.version_info >= (3, 0)

lines = []
for line in stream:
    if not PY3K:
        lines.append(line)
    else:
        lines.append(line.decode('utf-8', 'backslashreplace'))

지켜보리니 [Python 의 유니코드 지원] [3] 자세한 내용은.

  • 업데이트 20170119: 슬래시 탈출이라니요 디코딩합니다 구현하십시오 결심했다고 적합한 Python&amp 모두 사용할 수 있을 만큼 빨리 Python&;;; 2 와 3. 하지만 이 솔루션을 제시해야 한다고 한다 '' 보다 느린 cp437 동일한 결과 * 모든 윈도 버전.
# --- preparation

import codecs

def slashescape(err):
    """ codecs error handler. err is UnicodeDecode instance. return
    a tuple with a replacement for the unencodable part of the input
    and a position where encoding should continue"""
    #print err, dir(err), err.start, err.end, err.object[:err.start]
    thebyte = err.object[err.start:err.end]
    repl = u'\\x'+hex(ord(thebyte))[2:]
    return (repl, err.end)

codecs.register_error('slashescape', slashescape)

# --- processing

stream = [b'\x80abc']

lines = []
for line in stream:
    lines.append(line.decode('utf-8', 'slashescape'))

[2]: https://en.wikipedia.org/wiki/ISO/IEC_8859-1 # Codepage_layout [3]: https://docs.python.org/3/howto/unicode.html # 파이썬 유니코드 지원을 한다.

해설 (8)

[In 파이썬 3] [1],, '는' &quot 기본값입니다 인코딩입니다 utf-8&quot 수 있도록 직접 사용:

b'hello'.decode()

것과 같습니다

b'hello'.decode(encoding="utf-8")

반면, [in 파이썬 2], [2] 인코딩입니다 기본적으로 기본값입니다 구체화하십시오 인코딩입니다. 따라서 콩지름에:

b'hello'.decode(encoding)

여기서 '인코딩입니다 "는 인코딩입니다 운영까지도.

[ Note:] [2] 에 대한 지원, nbsp, 2.7 Python&amp 키워드 인수만 에 추가되었다.

[1]: https://docs.python.org/3/library/stdtypes.html # 비트러스데코드 [2]: https://docs.python.org/2.7/library/stdtypes.html # 스트리지코드

해설 (0)

실제로 이 스맥랜드의 한다고 생각합니다.

>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
>>> command_text = command_stdout.decode(encoding='windows-1252')

39 의 aaron& 오토메이티드 맞자나 단, you need to know) 어떤 인코딩입니다 사용할 수 있습니다. Windows 는 & # 39, & # 39, 1252년 indows 및 있다고 믿는다. 또 일부 특이한 것은 문자 (ascii) 만 있으면 만들 수 있지만, 그 내용을 말한다.

    • 은 오늘말야 문제가 있다는 것은 두 개의 서로 다른 유형의 바이너리 및 텍스트 데이터를 사용하여 파이썬 옮겼다. 이 때문에 그들 사이에 마술로 변환하시겠습니까 can& # 39, t, t # 39 doesn& 인코딩입니다 알고 있는 경우가 아니라면 tell it! 보나마나죠 는 Windows 설명서를 읽을 수 있는 유일한 방법은 (또는 그것을 읽은 여기).
해설 (2)

True 로 universal_newlines 설정 (예:

command_stdout = Popen(['ls', '-l'], stdout=PIPE, universal_newlines=True).communicate()[0]
해설 (2)

# 39 의 @Aaron Maenpaa& 오토메이티드 작동을 동안 사용자 [최근] [2]:

&gt. 더 간단하게 유지됩니까 운행에서어떠한? & # 39, & # 39, 이데코드 프한트드프리드 () (ASCII&quot ";) [.] # 39 의 it& so long!

사용할 수 있습니다.

command_stdout.decode()

'디코딩합니다 ()' 는 [표준 인수] [3]:

&gt. '고데치스데코드 (obj, 인코딩입니다 = & # 39, & # 39,, # 39 utf-8& 오류뿐만 = strict& # 39;)'

[2]: # comment55151210_33688948 https://stackoverflow.com/questions/33688837/urllib-for-python-3/33688948 [3]: https://docs.python.org/3/library/stdtypes.html # 바이트입니다 및 bytearray 운영체

해설 (0)

이후, you have a 보다 직접적인 정보를 묻는 질문에 '이 실제로 사용할 수 있는 하위' 출력입니다 외곽진입 허용합니다 [ 인코딩입니다 ] '이후' Popen (https://docs.python.org/3/library/subprocess.html # 자주 사용되는 인수만) 키워드 (python 에서 3.6+):

>>> from subprocess import Popen, PIPE
>>> text = Popen(['ls', '-l'], stdout=PIPE, encoding='utf-8').communicate()[0]
>>> type(text)
str
>>> print(text)
total 0
-rw-r--r-- 1 wim badger 0 May 31 12:45 some_file.txt

다른 사용자를 위한 것이 일반적인 대답 바이트입니다 디코딩합니다 텍스트:

>>> b'abcde'.decode()
'abcde'

인수 없이 ['시s.제더포텐코딩 ()'] (https://docs.python.org/3/library/sys.html # 시s.제더포텐코딩) 가 사용됩니다. 데이터가 없는 경우 '시s.제더포텐코딩 관심용 인코딩입니다 명시적으로 지정해야 합니다 ()' 의 ['디코딩합니다'] (https://docs.python.org/3/library/stdtypes.html # 비트러스데코드) 문의:

>>> b'caf\xe9'.decode('cp1250')
'café'
해설 (1)

텍스트 파일로 알고 바이트 순서를 해석할 수 있습니다 해당 문자 인코딩:

unicode_text = bytestring.decode(character_encoding)

예:

>>> b'\xc2\xb5'.decode('utf-8')
'µ'

'ls' 명령어를 해석할 수 있는 텍스트, t # 39 can& 출력됩니다. 파일 이름 unix 에서 b& # 39 를 제외한 모든 일련의 바이트입니다 슬래시 (slash), '수', 제로 / # 39.

39, \0& b& # 39 ',':

>>> open(bytes(range(0x100)).translate(None, b'\0/'), 'w').close()

Utf-8 인코딩을 사용하는 등 '수프' 이니고데데코디로어 바이트입니다 디코딩합니다 하는 의문이 제기됐다.

더 악화될 수 있다. 이 디코딩 장애가 발생할 경우 자동으로 지속되었고, [글자 깨짐] (https://en.wikipedia.org/wiki/Mojibake) 잘못 사용할 경우 호환되지 않는 인코딩입니다:

>>> '—'.encode('utf-8').decode('cp1252')
'—'

하지만 여전히 비인식 프로그램에 오류가 있는 데이터가 손상됨 발생했습니다.

일반적으로 어떤 문자 인코딩 에 포함되지 않은 바이트 순서를 사용할 수 있다. 이 정보 아웃오브밴드 통신하도록 있습니다. 일부 결과를 짐작할 수 있는 '가 될 가능성이 더 크다고, 따라서 다른 디바이스보다 카르데' 모듈에서는 문자 인코딩. 여러 다른 위치에서 하나의 문자 인코딩 파이썬 스크립트를 사용할 수 있습니다.

'ls' 를 사용하여 ['오스릭프스데코드 ()' 는 파이썬 문자열 출력 변환할 수 있습니다. [우네코다블 대해서도 성공할 수 있는 기능을] () 파일] (https://www.python.org/dev/peps/pep-0383/) (사용한다 '시s.제피리시스템렌코딩 수호가테스카피 오류 처리기 ()' 와 '에서' Unix):

import os
import subprocess

output = os.fsdecode(subprocess.check_output('ls'))

' ()' 은 원래 바이트입니다 세스페센코드 afaq 사용할 수 있습니다.

'진정한' 다음 '=' 는 하위 매개변수입니다 universal_newlines 전달하는 경우 '로카레이제프레퍼덴코딩 디코딩합니다 바이트입니다 (False)' 을 할 수 있다 (예: '에서' cp1252 indows.

작업을 바이트 스트림을 디코딩할 수 ['리오티스티우라프 ()'] (https://docs.python.org/3/library/io.html # 리오티스티우라프) 사용할 수 있습니다. [예] (https://stackoverflow.com/a/25945031/4279).

다른 문자를 나타내기 위해 다른 명령을 사용할 수 있습니다. 예를 들어, '출력입니다 dir 명령 (' cmd ')' 의 내부 cp437 사용할 수 있습니다. 디코딩합니다 수 있다. 출력입니다 전날에약혼자에게 통과할 수 있는 인코딩입니다 명시적으로 (파이썬 3.6+):

output = subprocess.check_output('dir', shell=True, encoding='cp437')

'오스트리스타디르 ()' (Windows 사용하는 파일 이름이 다를 수 있습니다. 예를 들어, '& # 39, 유니코드 apiu) # 39, & # 39 을 (를)', '\xb6& 대체할 수 있습니다.' s # 39 -python& \x14& # 39;;

39, b& # 39, '를' cp437 코텍이 매핑하므로 \x14& 제어 문자 대신 U + 0014

U + 00B6 (& # 182;). 임의의 유니코드 문자를 지원할 수 있는 파일 이름은 https://stackoverflow.com/q/33936074/4279 참조

해설 (0)

만일 당신이 디코딩합니다 ':' () 에 의해 다음과 같은 결과를 얻을 수 없을 것이다.

&gt. 아트리부텔라로: # 39, & # 39 str&. # 39, & # 39 decode& 객체에는 속성이 없습니다.

캐스트 직선입니다 인할지 인코딩입니다 유형을 지정할 수도 있습니다.

>>> my_byte_str
b'Hello World'

>>> str(my_byte_str, 'utf-8')
'Hello World'
해설 (0)

Windows 에서 데이터를 처리하는 경우, 내 대답은 시스템 (\r\n '와' 선 끝)

String = Bytes.decode("utf-8").replace("\r\n", "\n")

왜? 이 시도하시겠습니까 수신기마다 multiline 린퍼트.t스트:

Bytes = open("Input.txt", "rb").read()
String = Bytes.decode("utf-8")
open("Output.txt", "w").write(String)

네 모든 줄 끝이 두 배로 높아진다는 등 추가 빈 (\r\r\n '를') 이다. # 39 의 텍스트 읽기 python& 일반적으로 '\n' 만 사용할 수 있도록 기능을 정상화 문장열 선 끝. 이진 데이터를 받을 경우, 파이썬 Windows 시스템에서 그렇게 할 수 있는 기회가 있지 않습니다. 따라서

Bytes = open("Input.txt", "rb").read()
String = Bytes.decode("utf-8").replace("\r\n", "\n")
open("Output.txt", "w").write(String)

원본 파일을 복제하는 것이다.

해설 (1)

I made a 함수은 바뀌엇어요 청소하려면

def cleanLists(self, lista):
    lista = [x.strip() for x in lista]
    lista = [x.replace('\n', '') for x in lista]
    lista = [x.replace('\b', '') for x in lista]
    lista = [x.encode('utf8') for x in lista]
    lista = [x.decode('utf8') for x in lista]

    return lista
해설 (2)
    • 파이썬 훨씬 안전하고, 이는 위한 파이썬 3 '에서' 에서 '바이트입니다 외곽진입 변환하십시오 구체화하십시오':
def byte_to_str(bytes_or_str):
    if isinstance(bytes_or_str, bytes): # Check if it's in bytes
        print(bytes_or_str.decode('utf-8'))
    else:
        print("Object not of byte type")

byte_to_str(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')

출력:

total 0
-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file2
해설 (2)
  • [Sys - 시스템-특정 매개 변수와 함수] 에서 1 *:

이진 데이터 읽기 / 쓰기 위해, 또는 에서 사용하는 표준 바이너리 스트리밍합니다 밑에 있는 것을 의미한다. 예를 들어, stdout, 사용 '을 쓰기 바이트입니다 시s.스트더t.부퍼트라이트 (b& # 39, abc& # 39;)'.

해설 (1)
def toString(string):    
    try:
        return v.decode("utf-8")
    except ValueError:
        return string

b = b'97.080.500'
s = '97.080.500'
print(toString(b))
print(toString(s))
해설 (2)

뿐만 아니라 모든 바이트입니다 변환할지 스케쳐내 변환할 문자열을 바이트입니다:

with open("bytesfile", "rb") as infile:
    str = base64.b85encode(imageFile.read())

with open("bytesfile", "rb") as infile:
    str2 = json.dumps(list(infile.read()))

그러나 매우 효율적인 아니다. 이 사진 9 로 발쿰치로 2gb/s MB 입니다.

해설 (0)

, &Quot 셸 명령을 실행할 수 있으며, 특정 사용자의 경우, 그 대신 텍스트로 출력입니다 bytes&quot 콩지름에 ['서브프록스트런'] [1] 에서 3.7, 파이썬 및 통과 = True 'text' (= 진정한 '아니라' capture_output 캡처하려면 출력물에는)

command_result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
command_result.stdout  # is a `str` containing your program's stdout

예전에는 'text' '및' (뭐, 앨리어스) 의 파이썬 3.7 불렀으매 universal_newlines 바뀌었다. 파이썬 버전을 지원할 수 있는 universal_newlines 스케쳐내 전에 '진정한' 진정한 '대신' 텍스트 = = 3.7 전달하십시오

[1]: https://docs.python.org/3/library/subprocess.html # 서브프록스트런

해설 (0)