복붙노트

[PYTHON] 유니 코드 입력을 읽고 파이썬에서 유니 코드 문자열을 비교하는 방법?

PYTHON

유니 코드 입력을 읽고 파이썬에서 유니 코드 문자열을 비교하는 방법?

파이썬에서 일하고 있으며 유니 코드 형식의 사용자 입력 (명령 줄에서)을 읽으 려합니다. 즉, 유니 코드와 같은 raw_input을 읽으 려합니다.

또한, 유니 코드 문자열을 평등하게 테스트하고 싶습니다. 표준 ==처럼 작동하지 않습니다.

도와 줘서 고마워!

해결법

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

    1.raw_input ()은 OS 또는 UI 기능으로 인코딩 된 문자열을 반환합니다. 어려움은 그 디코딩이 무엇인지를 아는 것입니다. 다음을 시도해보십시오.

    raw_input ()은 OS 또는 UI 기능으로 인코딩 된 문자열을 반환합니다. 어려움은 그 디코딩이 무엇인지를 아는 것입니다. 다음을 시도해보십시오.

    import sys, locale
    text= raw_input().decode(sys.stdin.encoding or locale.getpreferredencoding(True))
    

    대부분의 경우 올바르게 작동합니다.

    우리는 당신을 돕기 위해 유니 코드 비교 작업에 대한 더 많은 데이터가 필요합니다. 그러나 정상화 문제 일 수 있습니다. 다음을 고려하세요:

    >>> a1= u'\xeatre'
    >>> a2= u'e\u0302tre'
    

    a1과 a2는 동등하지만 같지 않습니다.

    >>> print a1, a2
    être être
    >>> print a1 == a2
    False
    

    따라서 unicodedata.normalize () 메서드를 사용하는 것이 좋습니다.

    >>> import unicodedata as ud
    >>> ud.normalize('NFC', a1)
    u'\xeatre'
    >>> ud.normalize('NFC', a2)
    u'\xeatre'
    >>> ud.normalize('NFC', a1) == ud.normalize('NFC', a2)
    True
    

    더 많은 정보를 주시면 더 많은 도움을 드릴 수 있습니다.

  2. ==============================

    2.그것은 작동해야합니다. raw_input은 유니 코드 객체를 얻기 위해 올바른 인코딩을 사용하여 디코딩해야하는 바이트 문자열을 반환합니다. 예를 들어, 다음은 Python 2.5 / Terminal.app / OSX에서 나에게 적합하다.

    그것은 작동해야합니다. raw_input은 유니 코드 객체를 얻기 위해 올바른 인코딩을 사용하여 디코딩해야하는 바이트 문자열을 반환합니다. 예를 들어, 다음은 Python 2.5 / Terminal.app / OSX에서 나에게 적합하다.

    >>> bytes = raw_input()
    日本語 Ελληνικά
    >>> bytes
    '\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e \xce\x95\xce\xbb\xce\xbb\xce\xb7\xce\xbd\xce\xb9\xce\xba\xce\xac'
    
    >>> uni = bytes.decode('utf-8') # substitute the encoding of your terminal if it's not utf-8
    >>> uni
    u'\u65e5\u672c\u8a9e \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac'
    
    >>> print uni
    日本語 Ελληνικά
    

    유니 코드 문자열 비교 : 비교가 작동하지 않는 예제를 게시 할 수 있습니까?

  3. ==============================

    3.나는 정말로 "유니 코드 형식"으로 어떤 형식을 의미하는지 모르겠다. 몇 가지가있다. UTF-8? UTF-16? 어쨌든 raw_input으로 일반 문자열을 읽고 문자열 디코드 메서드를 사용하여 디코딩 할 수 있어야합니다.

    나는 정말로 "유니 코드 형식"으로 어떤 형식을 의미하는지 모르겠다. 몇 가지가있다. UTF-8? UTF-16? 어쨌든 raw_input으로 일반 문자열을 읽고 문자열 디코드 메서드를 사용하여 디코딩 할 수 있어야합니다.

    raw = raw_input("Please input some funny characters: ")
    decoded = raw.decode("utf-8")
    

    다른 입력 인코딩을 사용하는 경우 "utf-16"또는 "utf-8"대신 "utf-16"을 사용하십시오. 또한 다양한 종류의 인코딩에 대한 코덱 모듈 문서를 참조하십시오.

    그렇다면 비교는 ==와 잘 맞아야합니다. 특수 문자가 포함 된 문자열 리터럴을 사용하는 경우 유니 코드로 표시하려면 "u"를 앞에 붙여야합니다.

    if decoded == u"äöü":
      print "Do you speak German?"
    

    이 문자열을 다시 출력하려면 원하는 인코딩으로 다시 인코딩해야합니다.

    print decoded.encode("utf-8")
    
  4. ==============================

    4.일반적으로 유니 코드 문자열을 비교할 수는 없습니다. 문제는 동일한 문자를 구성하는 몇 가지 방법이 있다는 것입니다. 간단한 예제는 악센트 부호가있는 로마자입니다. 기본적으로 일반적으로 사용되는 모든 악센트 부호가있는 문자에 대한 코드 포인트가 있지만 악센트가없는 기본 문자와 비 - 간격 악센트로 구성하는 것도 좋습니다. 이 문제는 많은 로마자가 아닌 알파벳에서 더 중요합니다.

    일반적으로 유니 코드 문자열을 비교할 수는 없습니다. 문제는 동일한 문자를 구성하는 몇 가지 방법이 있다는 것입니다. 간단한 예제는 악센트 부호가있는 로마자입니다. 기본적으로 일반적으로 사용되는 모든 악센트 부호가있는 문자에 대한 코드 포인트가 있지만 악센트가없는 기본 문자와 비 - 간격 악센트로 구성하는 것도 좋습니다. 이 문제는 많은 로마자가 아닌 알파벳에서 더 중요합니다.

  5. from https://stackoverflow.com/questions/477061/how-to-read-unicode-input-and-compare-unicode-strings-in-python by cc-by-sa and MIT license