Ответ 1
вам нужно будет "закодировать" строку юникода.
s = u'\u5E73\u621015'
with open("yop", "wb") as f:
f.write(s.encode("UTF-8"))
попробуйте это немного поглядеть на unicode и python: http://farmdev.com/talks/unicode/
Я использую python 2.6.5 Я хочу написать некоторые японские символы в файл. Я получаю эту ошибку, и я не знаю, как изменить кодировку.
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
>>> s = u'\u5E73\u621015'
>>> with open("yop", "wb") as f:
... f.write( s + "\n" );
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:
ordinal not in range(128)
>>> type( s )
<type 'unicode'>
вам нужно будет "закодировать" строку юникода.
s = u'\u5E73\u621015'
with open("yop", "wb") as f:
f.write(s.encode("UTF-8"))
попробуйте это немного поглядеть на unicode и python: http://farmdev.com/talks/unicode/
В качестве альтернативы вы можете использовать модуль codecs
:
import codecs
s = u'\u5E73\u621015'
with codecs.open("yop", "w", encoding="utf-8") as f:
f.write(s)
Функция codecs.open() в 2.6 очень похожа на встроенную open() в python3.x(что имеет смысл, поскольку строки Py3k всегда являются Unicode). Для будущей проверки кода в случае, если он используется в Py3k, вы можете сделать следующее.
import sys
if sys.version_info[0] < 3:
import codecs
_open_func_bak = open # Make a back up, just in case
open = codecs.open
with open('myfile', 'w', encoding='utf-8') as f:
f.write(u'\u5E73\u621015')
Теперь ваш код должен работать одинаково как в 2.x, так и в 3.3 +.
Вставка этого в начале моего script имеет тенденцию решать проблемы с Unicode.
import sys
reload(sys)
sys.setdefaultencoding('utf8')