복붙노트

[PYTHON] 파이썬에서 유니 코드 코드 포인트를 UTF8 16 진수로 변환

PYTHON

파이썬에서 유니 코드 코드 포인트를 UTF8 16 진수로 변환

파일에서 읽은 많은 유니 코드 코드 포인트를 UTF8 인코딩으로 변환하고 싶습니다.

예 : 'FD9B'문자열을 'EFB69B'문자열로 변환하고 싶습니다.

다음과 같이 문자열 리터럴을 사용하여 수동으로이 작업을 수행 할 수 있습니다.

u'\uFD9B'.encode('utf-8')

하지만 프로그래밍 방식으로 해결하는 방법을 배울 수는 없습니다.

해결법

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

    1.내장 함수 unichr ()을 사용하여 숫자를 문자로 변환 한 다음 인코딩합니다.

    내장 함수 unichr ()을 사용하여 숫자를 문자로 변환 한 다음 인코딩합니다.

    >>> unichr(int('fd9b', 16)).encode('utf-8')
    '\xef\xb6\x9b'
    

    이것은 문자열 자체입니다. 문자열을 ASCII 16 진수로 사용하려면 16 진수 (ord (c)) 또는 이와 유사한 문자를 사용하여 각 문자 c를 16 진수로 변환해야합니다.

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

    2.

    data_from_file='\uFD9B'
    unicode(data_from_file,"unicode_escape").encode("utf8")
    
  3. ==============================

    3.여기에 완벽한 해결책이 있습니다.

    여기에 완벽한 해결책이 있습니다.

    >>> ''.join(['{0:x}'.format(ord(x)) for x in unichr(int('FD9B', 16)).encode('utf-8')]).upper()
    'EFB69B'
    
  4. ==============================

    4.

    Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
    [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> u'\uFD9B'.encode('utf-8')
    '\xef\xb6\x9b'
    >>> s = 'FD9B'
    >>> i = int(s, 16)
    >>> i
    64923
    >>> unichr(i)
    u'\ufd9b'
    >>> _.encode('utf-8')
    '\xef\xb6\x9b'
    
  5. ==============================

    5.입력 문자열 길이가 4의 배수 인 경우 (즉, 유니 코드 코드 포인트가 UCS-2로 인코딩 된 경우) 다음을 시도하십시오.

    입력 문자열 길이가 4의 배수 인 경우 (즉, 유니 코드 코드 포인트가 UCS-2로 인코딩 된 경우) 다음을 시도하십시오.

    import struct
    
    def unihex2utf8hex(arg):
        count= len(arg)//4
        uniarr= struct.unpack('!%dH' % count, arg.decode('hex'))
        return u''.join(map(unichr, uniarr)).encode('utf-8').encode('hex')
    
    >>> unihex2utf8hex('fd9b')
    'efb69b'
    
  6. ==============================

    6.와이드 유니 코드 문자와 함께 unichr을 사용하는 동안 오류가 발생할 수 있기 때문에 :

    와이드 유니 코드 문자와 함께 unichr을 사용하는 동안 오류가 발생할 수 있기 때문에 :

    >>> n = int('0001f600', 16)
    >>> unichr(n)
    ValueError: unichr() arg not in range(0x10000) (narrow Python build)
    

    좁은 파이썬 빌드에서 넓은 유니 코드에 대한 또 다른 접근법은 다음과 같습니다.

    >>> n = int('0001f600', 16)
    >>> s = '\\U{:0>8X}'.format(n)
    >>> s = s.decode('unicode-escape')
    >>> s.encode("utf-8")
    '\xf0\x9f\x98\x80'
    

    그리고 원래의 질문의 가치를 사용하십시오 :

    >>> n = int('FD9B', 16)
    >>> s = '\\u{:0>4X}'.format(n)
    >>> s = s.decode('unicode-escape')
    >>> s.encode("utf-8")
    '\xef\xb6\x9b'
    
  7. from https://stackoverflow.com/questions/867866/convert-unicode-codepoint-to-utf8-hex-in-python by cc-by-sa and MIT license