utf-8로 인코딩 된 문자열을 나타내는 바이트 배열이 있습니다. 이 바이트를 Pyton2의 문자열로 다시 디코드하려고합니다. 내 전반적인 프로그램을 위해 Python2에 의존하고 있으므로 Python3으로 전환 할 수 없습니다.어떻게 utf-8 바이트 배열을 Python2에서 문자열로 디코딩 할 수 있습니까?
array = [67, 97, 102, **-61, -87**, 32, 70, 108, 111, 114, 97]
-> 카페 é 플로라
내가 원하는 문자열의 모든 문자가 반드시 배열에 정확히 1 바이트로 표현되지 않기 때문에, 나는 같은 솔루션을 사용할 수 없습니다
"".join(map(chr, array))
을
배열을 단계별로 실행하는 함수를 만들려고했는데 0-127 (ASCII) 범위가 아닌 숫자를 만날 때마다 새로운 16 비트 int를 만들고 현재 비트를 8 이상으로 왼쪽으로 시프트하고, 다음을 추가합니다. b 비트 OR을 사용하는 yte. 마지막으로 unichr()을 사용하여 디코드합니다.
result = []
for i in range(len(byte_array)):
x = byte_array[i]
if x < 0:
b16 = x & 0xFFFF # 16 bit
b16 = b16 << 8
b16 = b16 | byte_array[i+1]
result.append(unichr(m16))
else:
result.append(chr(x))
return "".join(result)
그러나 이것은 실패했습니다.
다음 기사는 아주 잘 문제를 설명하고, nodeJS 솔루션이 포함
http://ixti.net/development/node.js/2011/10/26/get-utf-8-string-from-array-of-bytes-in-node-js.html
에 대한
struct.pack
를 사용할 수 있습니다. – user23571120-128의 모든 숫자를 '00'으로 "덧붙일"수는 없습니까? –
inmy 대답을 볼 수 있듯이 map 및 chr 버전의 조인은 거의 작동하지만 음수의 문제는 발생합니다.내 대답은 다음과 같습니다. 동일한 가독성 높은 생성기 표현식을 사용하고 음수를 처리합니다. – jsbueno