[string] Python 3 바이트 문자열 변수를 일반 문자열로 어떻게 변환합니까?

XML 이메일 첨부 파일을 읽었습니다.

bytes_string=part.get_payload(decode=False)

내 변수 이름에서 알 수 있듯이 페이로드는 바이트 문자열로 제공됩니다.

이 문자열을 내가 조작 할 수있는 사용 가능한 문자열로 바꾸기 위해 권장되는 Python 3 접근 방식을 사용하려고합니다.

예제는 다음을 보여줍니다.

str(b'abc','utf-8')

b내 변수에 (bytes) 키워드 인수를 적용 bytes_string하고 권장 방법을 사용하려면 어떻게해야합니까?

내가 시도한 방식이 작동하지 않습니다.

str(bbytes_string, 'utf-8')



답변

마지막 줄에서 거의 옳았습니다. 원하는

str(bytes_string, 'utf-8')

유형 때문에 bytes_stringIS bytes의 종류와 동일 b'abc'.


답변

인스턴스를 호출 decode()하여 bytes인코딩하는 텍스트를 가져옵니다.

str = bytes.decode()


답변

업데이트 :

b처음과 끝 부분에 따옴표를 붙이지 마십시오.

bytes이상한 상황에서도 문자열 로 변환하는 방법 .

코드에 인식 할 수 없는'utf-8' 인코딩 문자 가있을 있으므로 추가 매개 변수없이 str 만 사용하는 것이 좋습니다.

some_bad_bytes = b'\x02-\xdfI#)'
text = str( some_bad_bytes )[2:-1]

print(text)
Output: \x02-\xdfI

'utf-8'이 특정 바이트 에 매개 변수 를 추가 하면 오류가 발생합니다.

PYTHON 3 표준이 말했듯 text이 이제는 걱정하지 않고 utf-8에 있습니다.


답변

배열에서 UTF8이 아닌 문자를 필터링 (건너 뛰기)하는 방법은 무엇입니까?

@ uname01의 게시물과 OP에서이 댓글을 해결하려면 오류를 무시하세요.

암호

>>> b'\x80abc'.decode("utf-8", errors="ignore")
'abc'

세부

로부터 문서 , 여기에 같은 사용하여 더 많은 예 errors매개 변수 :

>>> b'\x80abc'.decode("utf-8", "replace")
'\ufffdabc'
>>> b'\x80abc'.decode("utf-8", "backslashreplace")
'\\x80abc'
>>> b'\x80abc'.decode("utf-8", "strict")
Traceback (most recent call last):
    ...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0:
  invalid start byte

errors 인수는 인코딩 규칙에 따라 입력 문자열을 변환 할 수없는 경우 응답을 지정합니다. 이 인수의 유효한 값은 'strict'( UnicodeDecodeError예외 발생), 'replace'(사용 U+FFFD, REPLACEMENT CHARACTER) 또는 'ignore'(유니 코드 결과에서 문자를 제외)입니다.


답변