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




깨짐 인코딩 (8)

조금 과장 될 수도 있지만 같은 파일에서 ascii 및 유니 코드로 작업 할 때 반복 디코드가 고통 스러울 수 있습니다. 이것이 내가 사용하는 것입니다.

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

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

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


ord () 및 unichar ()를 사용하여 번역하십시오. 모든 유니 코드 문자는 인덱스와 같은 숫자를 가지고 있습니다. 따라서 파이썬은 char와 그의 숫자 사이를 변환하는 몇 가지 방법을 가지고 있습니다. 단점은 ñ 예입니다. 희망이 도움이 될 수 있습니다.

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

위의 메서드가 작동하지 않으면 utf-8로 변환 할 수없는 문자열의 일부를 무시하도록 Python에 지시 할 수 있습니다.

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

이해가 잘된다면 코드에 UTF-8로 인코딩 된 바이트 문자열이 있습니다.

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

unicode 함수 또는 decode 메서드를 사용하면됩니다. 어느 한 쪽:

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

또는:

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

>>> 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")

^ 유니 코드로 변환하고 인코딩을 지정합니다.


.py 파일의 맨 위에 다음 행을 추가하십시오.

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

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

utfstr = "ボールト"

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

파이썬에는 삼항 조건부 연산자가 있습니까?

예. 문법 파일에서 :

test: or_test ['if' or_test 'else' test] | lambdef

관심있는 부분은 다음과 같습니다.

or_test ['if' or_test 'else' test]

따라서 삼항 조건부 연산은 다음과 같은 형식입니다.

expression1 if expression2 else expression3

expression3 은 느리게 평가됩니다 (즉, 부울 컨텍스트에서 expression2 가 false 인 경우에만 평가됩니다). 그리고 재귀적인 정의로 인해, 당신은 무기한으로 연결할 수 있습니다 (나쁜 스타일이라고 생각할 수도 있음).

expression1 if expression2 else expression3 if expression4 else expression5 # and so on

사용법에 대한 참고 사항 :

모든 ifelse 따라야합니다. 목록 내포물과 생성자 표현을 배우는 사람들은 이것을 배우기가 어려운 교훈으로 간주 할 수 있습니다. 다음은 작동하지 않습니다. Python은 else에 대한 세 번째 표현을 기대합니다.

[expression1 if expression2 for element in iterable]
#                          ^-- need an else here

SyntaxError: invalid syntax .가 발생 SyntaxError: invalid syntax . 그래서 위의 것은 불완전한 논리입니다 (아마도 사용자는 거짓 조건에서 아무 작업도하지 않을 것으로 기대합니다). 또는 의도 된 것은 expression2를 필터로 사용하는 것입니다 - 다음은 합법적 인 파이썬입니다 :

[expression1 for element in iterable if expression2]

expression2 는 목록 이해를위한 필터로 작동하며 삼항 조건 연산자가 아닙니다 .

더 좁은 경우의 대체 구문 :

다음을 작성하는 것이 다소 힘들 수도 있습니다.

expression1 if expression1 else expression2

expression1 은 위의 사용법으로 두 번 평가해야합니다. 단순히 지역 변수 인 경우 중복성을 제한 할 수 있습니다. 그러나,이 유스 케이스에 대한 공통적이고 실행 가능한 Pythonic 관용구는 행동을 사용 or 단축키를 사용하는 것입니다.

expression1 or expression2

이는 의미론에서 동일하다. 일부 스타일 가이드는 명확성을 이유로이 사용을 제한 할 수 있습니다. 아주 적은 구문으로 많은 의미를 담고 있습니다.





python python-2.7 unicode utf-8