ProgramingTip

Python 3에서 바이트와 암호화를 변환하는 방법은 무엇입니까?

bestdevel 2020. 11. 11. 20:29
반응형

Python 3에서 바이트와 암호화를 변환하는 방법은 무엇입니까?


이것은 Python 101 유형 질문이지만 암호화 입력을 바이트로 변환하는 것처럼 보이는 패키지를 사용하려고 할 때 당황했습니다.

아래에서 볼 수 있습니다 나는 스스로 답을 알아 내지 만 무슨 일이 일어나고 있는지 알아 내지 만 무슨 일이 일어나고 있는지 알아낼 가치가 있습니다. 에서는 3에서는 일반적인 것 같고 내가 가지고 놀던 원래 패키지를 사용하지 않습니다. 그것은 오류가없는 것입니다 (단지 특정 패키지에 내가 이해하는 것을보다 .tostring()명확하게 생성 하지 않는 방법이 있음)

내 테스트 프로그램은 다음과 가변합니다.

import mangler                                 # spoof package

stringThing = """
<Doc>
    <Greeting>Hello World</Greeting>
    <Greeting>你好</Greeting>
</Doc>
"""

# print out the input
print('This is the string input:')
print(stringThing)

# now make the string into bytes
bytesThing = mangler.tostring(stringThing)    # pseudo-code again

# now print it out
print('\nThis is the bytes output:')
print(bytesThing)

이 코드의 출력은 다음을 제공합니다.

This is the string input:

<Doc>
    <Greeting>Hello World</Greeting>
    <Greeting>你好</Greeting>
</Doc>


This is the bytes output:
b'\n<Doc>\n    <Greeting>Hello World</Greeting>\n    <Greeting>\xe4\xbd\xa0\xe5\xa5\xbd</Greeting>\n</Doc>\n'

따라서 ASCII가 아닌 문자가 고블 데국으로 바뀌는 것을 방지하기 위해 바이트와 문자열을 변환 할 수 있습니다.


위 코드 샘플의 'mangler'는 다음과 같은 작업을 수행했습니다.

bytesThing = stringThing.encode(encoding='UTF-8')

이를 통해 작성하는 다른 방법이 있습니다 (사용을 사용 bytes(stringThing, encoding='UTF-8')하지만 위의 구문을 통해 진행 상황과 노드 복구를 수행 할 작업을 명확하게 알 수 있음).

newStringThing = bytesThing.decode(encoding='UTF-8')

이렇게하면 복구됩니다.

를 사용 str(bytesThing)하면 UTF-8, 즉, 특별히 요청하지 않는 한 유니 코드로 다시 변환하지 않고 모든 gobbledegook을 전사합니다 str(bytesThing, encoding='UTF-8'). 인코딩이 지정되지 않은 경우 오류가보고되지 않습니다.


python3에는 bytes()같은 형식 메서드가 encode()있습니다.

str1 = b'hello world'
str2 = bytes("hello world", encoding="UTF-8")
print(str1 == str2) # Returns True

나는 문서에서 이것에 대해 아무것도 읽지 않았지만 아마도 올바른 위치를 찾지 못했을 것입니다. 명시 적으로 바이트 스트림으로 문자열을 설정 할 수 있습니다이 방법을 사용하는 것보다 더 읽기가 encodedecode, 그리고 prefex하지 않고 b따옴표 앞에.


이것은 Python 101 유형 질문입니다.

간단한 질문이지만 답이 그렇게 간단하지 않은 질문입니다.


python3에서 "bytes"객체는 일련의 바이트를 나타내고 "string"객체는 일련의 유니 코드 코드 포인트를 나타냅니다.

"바이트"에서 "문자열"로, "문자열"에서 다시 "바이트"로 변환하려면 bytes.encode 및 string.decode 함수를 사용합니다. 이러한 함수는 인코딩과 오류 처리 정책이라는 두 가지 매개 변수를 사용합니다.

슬프게도 바이트 시퀀스가 ​​텍스트를 나타내는 데 사용되는 경우가 많이 있지만 어떤 인코딩이 사용되는지 반드시 잘 정의되어 있지는 않습니다.

강력한 소프트웨어를 작성하려면 해당 매개 변수에 대해 신중하게 생각해야합니다. 바이트가 어떤 인코딩에 있어야하는지, 그리고 그것이 있어야한다고 생각한 인코딩에 대해 유효한 바이트 시퀀스가 ​​아닌 경우 어떻게 처리할지 신중하게 생각해야합니다. Python은 기본적으로 UTF-8로 설정됩니다. 유효한 UTF-8이 아닌 바이트 시퀀스에서 오류가 발생합니다.

인쇄 (bytesThing)

파이썬은 "repr"을 문자열로의 대체 변환으로 사용합니다. repr은 객체를 다시 생성하는 파이썬 코드를 생성하려고 시도합니다. 바이트 객체의 경우 이것은 인쇄 가능한 ASCII 범위를 벗어난 바이트를 이스케이프하는 것을 의미합니다.


이 시도:

StringVariable=ByteVariable.decode('UTF-8','ignore')

테스트 유형 :

print(type(StringVariable))

여기서 'StringVariable'은 문자열로 표시됩니다. 'ByteVariable'은 Byte로 표시됩니다. 질문 변수와 관련이 없습니다 ..

참고 URL : https://stackoverflow.com/questions/14010551/how-to-convert-between-bytes-and-strings-in-python-3

반응형