2015-07-18 1 views
0

Я написал простой скрипт на python, который сбрасывает веб-сайт для некоторых данных и сохраняет его в список, называемый данными. Некоторые данные имеют символы Unicode, я хочу записать этот список в CSV-файл и сохранить символы unicode в ascii.Запись юникода в файл в ascii в python (например, как u ' xa0EC)

Когда я печатаю список в оболочке python, символы Юникода отображаются как, например, «u» \ xa0EC », и я просто хочу, чтобы они были сохранены точно так же, как в .csv, чтобы их можно было интерпретировать позже в Unicode/UTF-8.

Я уверен, что это не может быть, что трудно, но я либо получаю «ASCii кодек не может кодировать ...» ошибка или то, что я в данный момент заменяет их с вопросительными знаками -

f = codecs.open('data2.csv', mode='wb', encoding="ascii", errors='ignore') 
writer = csv.writer(f) 
writer.writerow([i.encode('ascii','replace') if type(i) is unicode else i for i in data]) 
f.close() 

Извините, если до этого был дан ответ, я искал, но каждый другой вопрос, похоже, означает, что люди хотят, чтобы они были преобразованы.

+0

Вместо от кодирования до ascii (что означает потерю данных), почему бы не закодировать его на utf-8? – user590028

+0

Выход будет загружен в серию, где он будет интерпретироваться в UTF-8, но он должен быть загружен в ascii. – JimmyBoom

+0

Вы рассматривали использование html-экранов, таких как 'u '\ xa0EC'.encode (' ascii ',' xmlcharrefreplace ') == b'   EC'' , если содержимое поля * есть * html. Или просто выгрузите весь список как json: 'json.dumps ([u '\ xa0EC']) == '[" \\ u00a0EC "]'' – jfs

ответ

0

Вы хотите использовать кодировку «unicode_escape». Например:

s = "雥" 
s.encode("unicode_escape") 

дает следующие байты:

b'\\u96e5' 

Чтобы получить представление ASCII, вы хотите, чтобы декодировать байты с кодировкой ASCII, как например:

s.encode("unicode_escape").decode('ascii') 
+0

Спасибо, что это сработало отлично. Как еще вопрос, есть ли способ легко кодировать их в десятичном представлении? – JimmyBoom

+0

@JimmyBoom ​​попробуйте использовать функцию 'ord', например. 'ord ('雥')' – sammko

+0

@JimmyBoom: не используйте 'unicode_escape' в качестве формата сериализации, существует более портативный стандарт [альтернативы] (http://stackoverflow.com/questions/31493357/writing-unicode-to -a-файл-в-ASCII-в-питон-на-пример-а-у-xa0eC# comment50954320_31493357) – jfs

Смежные вопросы