2016-01-23 2 views
0

В Python 2.6.8 я получаю следующую ошибку при написании юникод строки:Python 2.6: Аргумент 1 должен быть строкой или возлагали буфер, не ByteArray, для ByteArray из UTF-8 строки

Traceback (most recent call last): 
    File "test.py", line 10, in <module> 
    f.write(bytearray(u, 'utf_8')) 
TypeError: argument 1 must be string or pinned buffer, not bytearray 

При запуске код в Python 2.7.8 все работает нормально, строка печатается и записывается правильно.

Это код:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

u = u"Möwe" 

print u 

with open("testout", "w") as f: 
    f.write(bytearray(u, 'utf_8')) 

Такое же поведение для строк встречается, содержащих 4-байтовых UTF-8 символов.

Python 2.6 двоичные данные:

$ python26 -v -c 'exit' 2>&1 | grep -A 1 '^Python' 
Python 2.6.8 (unknown, Nov 7 2012, 14:47:45) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2 

ответ

0

Файл открыт в режиме ASCII по-умолчанию, ЮНИКОДу байты не могут быть записаны, так как они содержат не-ASCII символов. Вы должны открыть файл в двоичном режиме:

with open("testout", "wb") as f: 
    f.write(bytearray(u, 'utf_8')) 

Python 2.6 docs on open()