파이썬에서 문자열을 UTF-8로 변환하는 방법


193

utf-8 문자를 Python 서버로 보내는 브라우저가 있지만 쿼리 문자열에서 검색하면 Python이 반환하는 인코딩은 ASCII입니다. 일반 문자열을 utf-8로 어떻게 변환 할 수 있습니까?

참고 : 웹에서 전달 된 문자열은 이미 UTF-8로 인코딩되어 있으므로 ASCII가 아닌 UTF-8로 처리하도록 Python을 만들고 싶습니다.


이 링크를 사용해보십시오 http://evanjones.ca/python-utf8.html
Mudassir

더 나은 제목은 번역없이 유니 코드로 문자열을 강제 변환하는 방법입니다.
boatcoder

1
2018 년 파이썬 3 ascii 디코딩 오류가 발생하면"some_string".encode('utf-8').decode('utf-8')
devssh

답변:


267
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ 이것은 바이트 문자열 (plain_string)과 유니 코드 문자열의 차이점입니다.

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ 유니 코드로 변환하고 인코딩을 지정하십시오.


34
, 나는 다음과 같은 오류가 발생합니다 : UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte이것은 내 코드입니다 : csvReader의 줄에 대한 ret = [] : 줄에있는 elm의 경우 cline = [] : unicodestr = unicode (elm, 'utf-8') cline.append (unicodestr) ret .append (cline)
Gopakumar NG

105
이 중 어느 것도 Python 3에 적용 unicode()되지 않으며 모든 문자열은 유니 코드이며 존재하지 않습니다.
Noumenon

이것을 부딪 치는 종류지만 감사합니다. 이것은 유니 코드를 인쇄하려고하고 s를 얻는 문제를 해결했습니다.
智障 的 人

형식으로 u다시 변환하는 방법 str(로 u다시 변환 s)?
Tanguy

3
이 코드는 텍스트에 ASCII가 아닌 문자가 포함되어 있지 않으면 작동합니다. 문자열에 간단한 악센트 문자가 있으면 실패합니다.
Haroldo_OK

71

위의 방법이 작동하지 않으면 파이썬에게 utf-8로 변환 할 수없는 문자열 부분을 무시하도록 지시 할 수 있습니다.

stringnamehere.decode('utf-8', 'ignore')

6
AttributeError : 'str'객체에 'decode'속성이 없습니다
saran3h

2
@ saran3h 파이썬 3을 사용하는 것처럼 들립니다.이 경우 파이썬 인코딩 문제를 처리 해야 합니다. 인코딩을 지정하지 않고 문서를 읽으려고 했습니까?
duhaime

파이썬은 기본적으로 시스템 인코딩을 선택합니다. Windows 10에서는 utf-8과 다른 cp1252입니다. 3.8에서 codecs.open ()을 사용하는 동안 몇 시간을 낭비했습니다.
Vishesh Mangla

21

약간 과잉 일 수 있지만 동일한 파일에서 ASCII 및 유니 코드로 작업 할 때 디코딩을 반복하는 것이 어려울 수 있습니다. 이것은 내가 사용하는 것입니다.

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
    return input

15

.py 파일 맨 위에 다음 줄 추가 :

# -*- coding: utf-8 -*-

다음과 같이 스크립트에서 직접 문자열을 인코딩 할 수 있습니다.

utfstr = "ボールト"

1
OP가 요구하는 것은 아닙니다. 그러나 어쨌든 그러한 문자열 리터럴을 피하십시오. 파이썬 3에서는 유니 코드 문자열을 생성하지만 (양호) 파이썬 2에서는 바이트 문자열입니다 (불량). from __future__ import unicode_literals상단에 추가 하거나 u''접두사를 사용하십시오 . bytes리터럴 에는 ASCII가 아닌 문자를 사용하지 마십시오 . UTF-8 바이트를 얻으려면 utf8bytes = unicode_text.encode('utf-8')나중에 필요한 경우 나중에 할 수 있습니다.
jfs

1
@ jfs from __future__ import unicode_literalsASCII가 아닌 문자가 포함 된 문자열을 utf-8로 변환하는 데 어떻게 도움이됩니까?
Ortal Turgeman

@OrtalTurgeman 나는 질문에 대답하지 않습니다. 봐, 그것은 대답이 아니라 주석이다. 내 의견은 답변의 코드로 문제를 해결합니다. 파이썬 2에서 ASCII가 아닌 문자로 바이트 문자열을 만들려고 시도합니다 (파이썬 3에서는 SyntaxError입니다-바이트 리터럴은 이것을 금지합니다).
jfs

13

내가 올바르게 이해하면 코드에 utf-8로 인코딩 된 바이트 문자열이 있습니다.

바이트 열을 유니 코드 문자열로 변환하는 것을 디코딩이라고합니다 (유니 코드-> 바이트 열이 인코딩 임).

유니 코드 함수 또는 디코드 방법 을 사용하여이를 수행합니다 . 어느 한 쪽:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

또는:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")

10
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

8

Python 3.6에서는 내장 unicode () 메소드가 없습니다. 문자열은 기본적으로 이미 유니 코드로 저장되며 변환이 필요하지 않습니다. 예:

my_str = "\u221a25"
print(my_str)
>>> 25

3

ord () 및 unichar ()로 번역하십시오. 모든 유니 코드 문자에는 인덱스와 같은 숫자가 연결되어 있습니다. 따라서 파이썬에는 문자와 숫자를 변환하는 몇 가지 방법이 있습니다. 단점은 예입니다. 그것이 도움이되기를 바랍니다.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.