ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Fluent Python] 텍스트와 바이트
    Programming/Python 2023. 6. 12. 10:15

    코드 포인트를 바이트로 변환하는 것은 인코딩

    바이트를 코드 포인트로 변환하는 것은 디코딩

    바이트

    bytes 형은 파이썬 3에서 소개된 불변형

    bytearray는 파이썬 2.6에 추가된 가변형

    str ⇒ 인코딩 시 잘못된 코덱을 사용할 경우 문자가 깨지거나(그렘린) 혹은 UnicodeDecodeError가 발생

    파이썬 3 의 경우 기본 인코딩 방식이 utf-8이다. 인코딩 선언 없이 비utf8로 인코딩 된 .py모듈을 로딩하면 에러 메시지 발생

    ⇒ 예방하기 위해서는 cp1252를 파일 맨꼭대기에 주석을 달아서 해결 가능

    coding: cp1252

    💡 윈도우의 경우 cp1252가 기본

     

    바이트 시퀀스의 인코딩 방식을 알아내는 방법

    1. b’\x00’ 바이트가 많이 나타난다면 16비트 혹은 32비트로 인코딩 되었을 확률 높음
    2. b’\x20\x00’ 바이트 시퀀스가 자주 나타난다면 이 문자는 utf-16le 인코딩에서의 공백 문자일 가능성이 크다
    3. chardet 패키지를 이용하면 30가지 인코딩 방식을 알아낸다.

     

    텍스트 파일 다루기

    장고의 경우 뷰는 유니코드 str만 출력하고, 장고 자체가 응답을 bytes로 인코딩하는 일을 담당한다.

     

    파이썬의 경우 내장된 open() 함수는 파일을 텍스트 모드로 읽고 쓸 때 필요한 모든 인코딩과 디코딩 작업을 수행해주므로 read()에서 str 객체를 가져와서 처리하고 write()에 전달하면 된다.

     

    파일을 읽을 때에는 해당하는 운영체제 혹은 지역 설정에 의존해서 인코딩 방식에 따른 오류가 발생할 수도 있다.

     

    그러기에 읽을 때나 쓸 때 인코딩과 디코딩에 유의해야한다.

     

    window의 경우 cp1252를 사용하는데 python을 이용해서 utf-8로 읽고 저장하고 다시 읽을 경우 cp1252로 읽어져 원하는 값이 안나오는 오류가 있을 수 있다.

     

    normalrize ⇒ 를 통해서 정규화 진행을 할 경우 여러 인코딩 관련 문제에서 벗어날 수 있다. 그 중 NCP 가 w3s 규격에 사용되어짐

    NFC와 NFD는 안전하며 유니코드 문자열을 적절히 비교할 수 있게 해준다. NFC가 최고다.

     

    str.casefold() 는 대소문자 구분 없이 문자를 비교할 때 가장 좋은 방법

    'Programming > Python' 카테고리의 다른 글

    함수 데코레이터와 클로저  (0) 2023.06.12
    [Fluent Python]일급 함수  (0) 2023.06.12
    [Fluent Python] 딕셔너리와 집합  (0) 2023.06.12
    [Fluent Python] 내장 시퀀스  (0) 2023.06.12
    [Fluent Python]파이썬 데이터 모델  (0) 2023.06.12
Designed by Tistory.