2016-08-18 1 views
-1

을 유니 코드로 은밀한 수있는 방법 :나는 그것이 내가 문자열이

u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85' 

그것은 сyrillic 텍스트를 포함합니다. 내가 파이썬 2.7.x로 변환하여 짤막하게 문자로 유니 코드 문자열로 변환하는 방법. latin1 인코딩

u'видео палец вверх' 

답변

3

인코딩 : 원래 문자열에 u 접두사가 잘못된 것 같다

>>> s = u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85' 

>>> print s.encode('latin1') 
видео палец вверх 
+0

내 Windows 시스템에서 코드를 사용 그것은 단지 쓰레기를 표시 ... –

+1

그 방법이 틀린가? 원본은 UTF-8로 인코딩되어 유니 코드로 잘못 표시되기 때문입니다. 'u' 접두사를 없애고's.decode ('utf-8')'를 사용하면 트릭을해야합니다. 인쇄 된대로 현재 인코딩이 'utf-8'일 때만 작동하므로 문자열 리터럴이 해당 인코딩으로 해석됩니다. – dhke

+0

@dhke 어쩌면 OP가 인코딩 된 문자열을 처리하고있는 것으로 보입니다. 그래서 당신은'latin1'에 대한 인코딩으로 전체 프로세스를 뒤바꿀 수 있습니다. – Kasramvd

1

있다. 문자처럼 보이는이 UTF-8로 인코딩, 그래서 이것은 간단한 (바이트) 문자열이어야한다 : 다른 곳에서 해당 문자열을 가지고있는 경우

# no u'' prefix: 
s = '\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85' 
# string is utf-8, decode it to unicode 
u = s.decode('utf-8') 
# this only works when your terminal charset is properly set up 
print u 
>>>> видео палец вверх 

, 그것의 문자열 형식이 잘못되었습니다. 이 경우, 서지 Ballesta의 및 Kasramvd의 조언을 따를 수와 latin1 인코딩을 인코딩하여 바이트 문자열로 다시 강제 :

s = u'\xd0\xb2\xd0\xb8\xd0\xb4\xd0\xb5\xd0\xbe \xd0\xbf\xd0\xb0\xd0\xbb\xd0\xb5\xd1\x86 \xd0\xb2\xd0\xb2\xd0\xb5\xd1\x80\xd1\x85' 
# force encode with latin 1 and then properly decode it using utf-8 
u = s.encode('latin1').decode('utf-8') 
print u 
>>>> видео палец вверх 
+2

초기 값에'u' 접두어가 들어 있으면, 먼저 latin1 인코딩으로 바이트로 변환 할 수 있습니다 :'ut.encode ('latin1'). decode ('utf8')' –

+0

@SergeBallesta 그래,하지만 OP 바이트 문자열 대신에 UTF-8 인코딩을 사용하는 유니 코드 문자열을 얻습니다. 이미 뭔가 잘못되었습니다. – dhke