[PYTHON] 파이썬에서 유니 코드 코드 포인트를 UTF8 16 진수로 변환
PYTHON파이썬에서 유니 코드 코드 포인트를 UTF8 16 진수로 변환
파일에서 읽은 많은 유니 코드 코드 포인트를 UTF8 인코딩으로 변환하고 싶습니다.
예 : 'FD9B'문자열을 'EFB69B'문자열로 변환하고 싶습니다.
다음과 같이 문자열 리터럴을 사용하여 수동으로이 작업을 수행 할 수 있습니다.
u'\uFD9B'.encode('utf-8')
하지만 프로그래밍 방식으로 해결하는 방법을 배울 수는 없습니다.
해결법
-
==============================
1.내장 함수 unichr ()을 사용하여 숫자를 문자로 변환 한 다음 인코딩합니다.
내장 함수 unichr ()을 사용하여 숫자를 문자로 변환 한 다음 인코딩합니다.
>>> unichr(int('fd9b', 16)).encode('utf-8') '\xef\xb6\x9b'
이것은 문자열 자체입니다. 문자열을 ASCII 16 진수로 사용하려면 16 진수 (ord (c)) 또는 이와 유사한 문자를 사용하여 각 문자 c를 16 진수로 변환해야합니다.
-
==============================
2.
data_from_file='\uFD9B' unicode(data_from_file,"unicode_escape").encode("utf8")
-
==============================
3.여기에 완벽한 해결책이 있습니다.
여기에 완벽한 해결책이 있습니다.
>>> ''.join(['{0:x}'.format(ord(x)) for x in unichr(int('FD9B', 16)).encode('utf-8')]).upper() 'EFB69B'
-
==============================
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.입력 문자열 길이가 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.와이드 유니 코드 문자와 함께 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'
from https://stackoverflow.com/questions/867866/convert-unicode-codepoint-to-utf8-hex-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 'stdin'을 파이썬의 다른 프로세스에 인수로 전달하는 방법이 있습니까? (0) | 2018.11.24 |
---|---|
[PYTHON] PyCharm에서 Python 2 코드를 3으로 변환 (0) | 2018.11.24 |
[PYTHON] 심하게 중첩 된 JSON에서 팬더 데이터 프레임 만들기 (0) | 2018.11.24 |
[PYTHON] Python : Excel 2007+ 파일 (.xlsx 파일)에 쓰기 (0) | 2018.11.24 |
[PYTHON] 프로그램을 실행하면 Tkinter 버튼 명령이 활성화됩니까? (0) | 2018.11.24 |