[python] 유니 코드 문자열을 Python의 문자열로 변환 (추가 기호 포함)

£ $와 같은 추가 문자가 포함 된 유니 코드 문자열을 파이썬 문자열로 어떻게 변환합니까?



답변

보다 unicodedata.normalize

title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii', 'ignore')
'Kluft skrams infor pa federal electoral groe'


답변

비 ASCII 문자를 변환 할 필요가없는 경우 encode를 ASCII로 사용할 수 있습니다.

>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>


답변

>>> text=u'abcd'
>>> str(text)
'abcd'

문자열에 ASCII 문자 만 포함 된 경우


답변

유니 코드 문자열이 있고이를 파일 또는 다른 직렬화 된 양식에 쓰려면 먼저 저장할 수있는 특정 표현으로 인코딩 해야합니다 . UTF-16 (대부분의 유니 코드 문자에 2 바이트 사용) 또는 UTF-8 (문자에 따라 1-4 바이트 / 코드 포인트) 등과 같은 몇 가지 일반적인 유니 코드 인코딩이 있습니다. 해당 문자열을 특정 인코딩으로 변환하려면 사용할 수 있습니다 :

>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'

이 원시 바이트 문자열을 파일에 쓸 수 있습니다. 그러나 다시 읽을 때는 인코딩이 무엇인지 알고 동일한 인코딩을 사용하여 디코딩해야합니다.

파일에 쓸 때 코덱 모듈 을 사용하여이 수동 인코딩 / 디코딩 프로세스를 제거 할 수 있습니다 . 따라서 모든 유니 코드 문자열을 UTF-8 로 인코딩하는 파일을 열려면 다음을 사용하십시오.

import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string)  # Stored on disk as UTF-8

이러한 파일을 사용하는 다른 파일은 파일을 읽으려면 파일의 인코딩을 이해해야합니다. 당신이 읽기 / 쓰기를하는 유일한 사람이라면 이것이 문제가되지 않습니다. 그렇지 않으면 다른 파일을 사용하는 사람이 이해할 수있는 형태로 작성해야합니다.

Python 3에서는 이러한 형식의 파일 액세스가 기본값이며 내장 open함수는 인코딩 매개 변수를 사용하고 텍스트 모드에서 열린 파일에 대해 항상 유니 코드 문자열 (Python 3의 기본 문자열 객체)로 /로부터 변환합니다.


답변

예를 들면 다음과 같습니다.

>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'


답변

글쎄, 파이썬 3으로 기꺼이 전환 할 준비가 되었다면 (파이썬 2 코드와 역 호환되지 않기 때문에) 변환 할 필요는 없다. Python 3의 모든 텍스트는 유니 코드 문자열로 표시되며 u'<text>'구문을 더 이상 사용하지 않습니다 . 또한 데이터를 나타내는 데 사용되는 바이트 문자열도 있습니다 (인코딩 된 문자열 일 수 있음).

http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

(물론, 현재 Python 3을 사용하고 있다면 문제는 텍스트를 파일에 저장하려는 방법과 관련이 있습니다.)


답변

다음은 예제 코드입니다

import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')