중요한 사실은 str 인스턴스에는 직접 대응하는 이진 인코딩이 없고 bytes에는 직접 대응하는 텍스트 인코딩이 없다는 점이다. 유니코드 데이터를 이진 데이터로 변환하려면 str의 encode 메서드를 호출해야 하고, 이진 데이터를 유니코드 데이터로 변환하려면 bytes의 decode 메서드를 호출해야 한다. 두 메서드를 호출할 때 여러분이 원하는 인코딩 방식을 명시적으로 지정할 수도 있고, 시스템 디폴트 인코딩을 받아들일 수도 있다. 일반적으로는 UTF-8이 시스템 디폴트 인코딩 방식이다(항상 UTF-8이 디폴트인 것은 아니다. 자세한 내용은 다음을 참고하자).
파이썬 프로그램을 작성할 때 유니코드 데이터를 인코딩하거나 디코딩하는 부분을 인터페이스의 가장 먼 경계 지점에 위치시켜라. 이런 방식을 유니코드 샌드위치라고 부른다. 프로그램의 핵심 부분은 유니코드 데이터가 들어 있는 str을 사용해야 하고, 문자 인코딩에 대해 어떠한 가정도 해서는 안 된다. 이런 접근 방식을 사용하면 다양한 텍스트 인코딩(Latin-1이나 Shift JIS, euc-kr, cp949, Big5 등)으로 입력 데이터를 받아들일 수 있고, 출력 텍스트 인코딩은 한 가지로(UTF-8이 이상적이다) 엄격히 제한할 수 있다.
문자를 표현하는 타입이 둘로 나뉘어 있기 때문에 파이썬 코드에서는 다음과 같은 두 가지 상황이 자주 발생한다.
• UTF-8(또는 다른 인코딩 방식)로 인코딩된 8비트 시퀀스를 그대로 사용하고 싶다.
• 특정 인코딩을 지정하지 않은 유니코드 문자열을 사용하고 싶다.
두 경우를 변환해주고 입력 값이 코드가 원하는 값과 일치하는지 확신하기 위해 종종 두 가지 도우미 함수가 필요하다.