파이썬 유니코드/스트링 이슈

요즘 파이썬계에서는 PEP318 펑션 데코레이터가 엄청난 태풍으로 몰아치고 지금은 다 싸우다 지쳐서 수그러드는 태세지만 여전히 결론은 안 나고 문법을 새로 도입할 때마다 겪는 진통을 톡톡히 겪고 있습니다.

그 와중에 두가지 문자열 처리 이슈가 띄엄띄엄 토론되고 있는데, 바로 “Decoding incomplete unicode”와 “adding a byte sequence type to Python”입니다. 전자는 StreamReaderStreamWriter에서 현재 표준 UTF-8, UTF-7 코덱은 완결되지 않은 상태를 제대로 처리하지 못하고 있으며, CJKCodecs의 코덱들은 대충 파일이 끝나면 시퀀스도 끝났다고 보고 처리하고 있는데 이를 프로그램측에서 명시적으로 끝이다 아니다를 결정해 주는 API를 추가하자는 Walter의 제안으로 시작되었습니다. Walter의 제안에서는 패치도 나왔지만 API가 지나치게 복잡하고 Marc-Andre가 API가 변경되는 것에 강하게 반발하고 있어서 어떻게 될 지는 모르겠지만, 아무래도 필요하기는 할 것 같네요. CJKCodecs에서도 끝인가 아닌가 판단하는게 참 모호해서, EUC-JISX0213 코덱 같은 경우에는 호출 도중에 어디에서 짤리느냐에 따라 결과가 달라지기도 하는 문제가 있습니다 -O-

그 다음에 “adding a byte sequence type to Python”은 b”xxxx”라고 쓰면 바이트 시퀀스로 처리하고 문자열처럼 쓰지 말자 뭐 이런 내용인데, Java나 C#처럼 유니코드가 나온 이후에 나온 언어들은 대체로 다 채택하고 있는 byte와 char타입의 분리에 대한 내용입니다. 현재 파이썬에서는 “xxx”라고 쓰면 이게 싱글 바이트 시퀀스이면서 문자열을 겸하는데, 원래 싱글 바이트 시퀀스의 역할을 b”xxx” 표기법으로 바꿔버리고 “xxx”는 순수한 문자열 객체로 뭐 어쩌고 저쩌고 하자는 원래 제안이 올라왔었습니다. 그런데, 대충 토론의 결론은 이렇게 되면 하위호환성 문제가 되니까, Python 3000에서 “xxx”는 유니코드 타입으로 바꿔버리고 b”xxx”를 싱글 바이트 시퀀스로 쓰자는 쪽으로 결론이 났고 귀도가 이를 확인해 줬습니다. 그리고 물론 싱글 바이트 시퀀스 타입에서는 기존에 있던 str.lower이나 str.isalpha같은 문자열에서만 있는 메쏘드들이 다 사라질 것이라고 합니다. 현재 문자열은 뭐 영어 사용자들을 위한 문자열이나 다름이 없으니 Python 3000 아주 기대가 되는군요. 냉큼 바뀌면 좋겠습니다. ㅋㅋㅋ (그러나.. 그 기존에 문자열을 바이트 시퀀스로 쓰는 대부분의 코드들은 어찌 포팅할지 -ㅇ-)

19 thoughts on “파이썬 유니코드/스트링 이슈”

  1. 흠.. 뭔가 이해가 잘 안되는..
    php는 null을(0x00이나 u+0000) terminated charater로 보지 않나요? 험…

    ISO10646-2 에 속하는 코드들은 U”xxxx”로 하는건가요? (흠.. 입력도 잘 안될듯하지만..)
    이미 u”xx”랑 U”xxxx”는 지원되고 있지 않나요?
    (아~ 슬슬 헷갈리기 시작한다.)
    윈도우에서는 L”가나다” 이런게 ISO10646-1까지만 지원되니 앞으론 문제가 될것 같은데.. 후움… 랄라~

  2. 파이썬의 str은 지금도 널을 터미네이터로 안 쓰기 때문에.. 바이트 시퀀스와 스트링의 야릇한 중간쯤 되는 녀석이죠 흐흐;

  3. 흠.. 문득.. 자바의 String안에 null 종결문자가 중간에 있어도, print하면 그뒤까지 다 출력되었던 기억이.. 흠.. 안 좋아요… python의 str이 Java의 String형태라면, 자바에서 length() 에 해당하는 놈이 있을텐데 그렇담 끝인지 아닌지 알 필요없지 않나요?

    얼마전 고민했었던 Windows에서 GetPrivateProfileString 함수는 인자가 두개이상일때 delimeter를 0x00로 해서 정말 끝날땐 0x00 두개를 넣는 엽기적인걸 -,-;;;; 봤는데… 흐흐흐… 복잡한 객체 시러여 -,-;;

  4. (1) 지저분해 죽겠어요 그냥… ㅠㅠ (2) 항상은 아니고, 손님 좀 많은 날만… 어제는 손님이 좀 많은 날이었던 것 같아요. 무슨 행사가 있었는지… 짜증나 죽는 줄 알았어요 ㅠㅠ

Comments are closed.