£ $와 같은 추가 문자가 포함 된 유니 코드 문자열을 파이썬 문자열로 어떻게 변환합니까?
unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
£ $와 같은 추가 문자가 포함 된 유니 코드 문자열을 파이썬 문자열로 어떻게 변환합니까?
unicode_string = u"I'm unicode string"; bytestring = unicode_string.encode('utf-8'); unicode_again = bytestring.decode('utf-8')
답변:
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'
unicode
str
type(title) == unicode and type(title.encode('utf-8')) == str
. 파일에 저장할 수있는 바이트 스트링을 얻기 위해 입력을 손상시킬 필요가 없습니다.
비 ASCII 문자를 변환 할 필요가없는 경우 encode를 ASCII로 사용할 수 있습니다.
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
ignore
대replace
a.encode('ascii', 'xmlcharrefreplace')
제공합니다 'aaaàçççñññ'
.
type(a)
이다 str
파이썬 3.6.8에 어떤없는 encode()
방법을.
>>> 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'
utf8
여기에 표시된 것처럼 유로 기호를 인코딩 할 때 결과가 물음표 일뿐 인 이유를 누구나 설명 할 수 있습니까 ? 다음은 Python 버전 2.7.13 의 이미지 입니다. ( u"Klüft"
유로는 유로 와 같은 다른 유니 코드 객체를 인코딩 할 수 있습니까?)
글쎄, 파이썬 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을 사용하고 있다면 문제는 텍스트를 파일에 저장하려는 방법과 관련이 있습니다.)
유니 코드를 사용하지 않는 문자열을 포함하는 파일
\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0437\\u0430\\u0446\\u0438\\u044f .....\",
나를 위해
f = open("56ad62-json.log", encoding="utf-8")
qq=f.readline()
print(qq)
{"log":\"message\": \"\\u0410\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u0430\\u0446\\u0438\\u044f \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043b\\u044f\"}
(qq.encode().decode("unicode-escape").encode().decode("unicode-escape"))
# '{"log":"message": "Авторизация пользователя"}\n'
result.encode().decode('unicode-escape')
유니 코드 문자가 포함 된 문자열 변수가 있고 여기에 설명 된 인코딩 디코딩이없는 경우 내 대답에는 효과가 없었습니다.
터미널에서하면
echo "no me llama mucho la atenci\u00f3n"
또는
python3
>>> print("no me llama mucho la atenci\u00f3n")
출력이 정확합니다 :
output: no me llama mucho la atención
그러나이 문자열 변수를로드하는 스크립트 작업은 작동하지 않았습니다.
이것은 누군가를 돕기 위해 제 경우에 효과가 있었던 것입니다 .
string_to_convert = "no me llama mucho la atenci\u00f3n"
print(json.dumps(json.loads(r'"%s"' % string_to_convert), ensure_ascii=False))
output: no me llama mucho la atención
print type(unicode_string), repr(unicode_string)
Python 3.x :print type(unicode_string), ascii(unicode_string)
그런 다음 질문을 편집하고 위의 인쇄 문의 결과를 복사 / 붙여 넣기하십시오. 결과를 다시 입력하지 마십시오. 또한 HTML의 상단에 찾아보고이 같은 것을 찾을 수 있는지 확인 : <META HTTP-EQUIV = "Content-Type을"내용 = "text / html과; 문자셋 = 이소 - 8859