2011-03-26 6 views
8
Python 3.2 (r32:88445, Feb 20 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> str_version = 'នយោបាយ' 
>>> type(str_version) 
<class 'str'> 
>>> print (str_version) 
នយោបាយ 
>>> unicode_version = 'នយោបាយ'.decode('utf-8') 
Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    unicode_version = 'នយោបាយ'.decode('utf-8') 
AttributeError: 'str' object has no attribute 'decode' 
>>> 

유니 코드 문자열에 어떤 문제점이 있습니까?문자열 파이썬에서 유니 코드를 사용하고 있습니까?

답변

10

문자열에 아무런 문제가 없습니다. 너는 단지 encode()decode()을 혼동했다. 문자열은 의미있는 기호입니다. 파일로 저장하거나 인터넷을 통해 전송할 수있는 바이트로 변환하려면 인 UTF-8과 같은 encode()을 사용하십시오. 각 인코딩은 의미있는 기호를 출력의 플랫 바이트로 변환하는 체계입니다. 파일이나 소켓에서 일부 원시 바이트를 가지고 문자와 숫자 등의 기호로를 설정하는 - -

시간이 반대 할 온다

당신은 디코드 파이썬 3 bytestrings의 decode() 방법을 사용하여 바이트

>>> str_version = 'នយោបាយ' 
>>> str_version.encode('utf-8') 
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99' 

큰 긴 행을 참조하십시오. UTF-8은 문자열을 네트워크를 통해 전송하거나 문서에 저장해야하는 경우 문자열을 나타내는 데 사용되는 바이트입니다. 사용중인 다른 많은 인코딩이 있지만 가장 인기있는 것 같습니다. 각 인코딩은 ន 및 like 같은 의미있는 기호를 바이트로 변환 할 수 있습니다.이 기호는 컴퓨터가 통신하는 작은 8 비트 숫자입니다.

>>> rawbytes = str_version.encode('utf-8') 
>>> rawbytes 
b'\xe1\x9e\x93\xe1\x9e\x99\xe1\x9f\x84\xe1\x9e\x94\xe1\x9e\xb6\xe1\x9e\x99' 
>>> rawbytes.decode('utf-8') 
'នយោបាយ' 
+0

아직 깨끗하지 않습니다. 더 명확히 설명해 주시겠습니까? 감사합니다 Brandon Craig Rhodes – kn3l

+0

다른 단락과 일부 코드 샘플을 추가했습니다 - 더 명확하게 설명합니까? –

+0

이제는 분명합니다. 지금 당장 귀하의 모범을 보았습니다. 고맙습니다. @Brandon Craig Rhodes – kn3l

7

2.x 문서를 읽는 중입니다. str.decode() (및 bytes.encode())은 3.x에서 삭제되었습니다. str은 이미 유니 코드 문자열입니다. 디코딩 할 필요가 없습니다.

3

이미 유니 코드 문자열이 있습니다. Python 3에서 str은 유니 코드 문자열 (Python 2.x에서는 unicode)이며 1 바이트 문자열 (Python 2.x str)은 더 이상 텍스트로 처리되지 않으며 이제는 bytes이라고합니다. 후자는 decode 방법을 사용하여 str으로 변환 할 수 있지만 이전은 이미 디코딩되어 있습니다. 인 코드로 bytes으로 다시 인코딩 할 수 있습니다.

관련 문제