복붙노트

[PYTHON] 파이썬 유니 코드 동일 비교 실패

PYTHON

파이썬 유니 코드 동일 비교 실패

이 질문은 Python에서 유니 코드 문자 검색과 연결됩니다.

파이썬 코덱을 사용하여 유니 코드 텍스트 파일을 읽었습니다.

codecs.open('story.txt', 'rb', 'utf-8-sig')

그리고 문자열을 검색하려고했습니다. 하지만 다음 경고가 나타납니다.

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal

유니 코드 문자열 비교의 특별한 방법이 있습니까?

해결법

  1. ==============================

    1.== 연산자를 사용하여 유니 코드 객체가 동일한 지 비교할 수 있습니다.

    == 연산자를 사용하여 유니 코드 객체가 동일한 지 비교할 수 있습니다.

    >>> s1 = u'Hello'
    >>> s2 = unicode("Hello")
    >>> type(s1), type(s2)
    (<type 'unicode'>, <type 'unicode'>)
    >>> s1==s2
    True
    >>> 
    >>> s3='Hello'.decode('utf-8')
    >>> type(s3)
    <type 'unicode'>
    >>> s1==s3
    True
    >>> 
    

    그러나 오류 메시지는 유니 코드 개체를 비교하지 않는다는 것을 나타냅니다. 아마도 unicode 객체를 str 객체와 비교할 것이다.

    >>> u'Hello' == 'Hello'
    True
    >>> u'Hello' == '\x81\x01'
    __main__:1: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
    False
    

    유니 코드 객체를 유효한 UTF8 인코딩을 나타내지 않는 문자열과 어떻게 비교하려했는지보십시오.

    프로그램에서 유니 코드 객체를 str 객체와 비교하고 있고 str 객체의 내용이 유효한 UTF8 인코딩이 아니라고 생각합니다. 이것은 당신 (프로그래머)이 어떤 변수가 유니크 (unicide)를 가지고 있는지, 어떤 변수가 UTF8을 보유하고 어떤 변수가 파일로부터 읽혀진 바이트를 보유하고 있는지를 모르는 결과로 보입니다.

    http://nedbatchelder.com/text/unipain.html, 특히 "유니 코드 샌드위치"를 만드는 조언을 권합니다.

  2. from https://stackoverflow.com/questions/18193305/python-unicode-equal-comparison-failed by cc-by-sa and MIT license