ошибка чтения csv python [дубликат]

ECMAScript 6 имеет «генераторы», которые позволяют вам легко программировать в асинхронном стиле.

function* myGenerator() {
    const callback = yield;
    let [response] = yield $.ajax("https://stackoverflow.com", {complete: callback});
    console.log("response is:", response);

    // examples of other things you can do
    yield setTimeout(callback, 1000);
    console.log("it delayed for 1000ms");
    while (response.statusText === "error") {
        [response] = yield* anotherGenerator();
    }
}

Для запуска вышеуказанного кода вы делаете это:

const gen = myGenerator(); // Create generator
gen.next(); // Start it
gen.next((...args) => gen.next([...args])); // Set its callback function

Если вам нужно настроить таргетинг на браузеры, которые не поддерживают ES6, вы можете запустить код через Babel или short-compiler для генерации ECMAScript 5.

Обратный вызов ...args завернут в массив и разрушен, когда вы их читаете так что шаблон может справиться с обратными вызовами, которые имеют несколько аргументов. Например, с узлом fs :

const [err, data] = yield fs.readFile(filePath, "utf-8", callback);

89
задан Rubens Mariuzzo 4 December 2014 в 17:34
поделиться

15 ответов

Это связано с тем, что кодировка вашего терминала не установлена ​​на UTF-8. Вот мой терминал

$ echo $LANG
en_GB.UTF-8
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> 

На моем терминале пример работает с указанным выше, но если я избавлюсь от настройки LANG, то он не будет работать

$ unset LANG
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
>>> 

Обратитесь к документам для вашего варианта linux, чтобы узнать, как сделать это изменение постоянным.

67
ответ дан Nick Craig-Wood 27 August 2018 в 22:11
поделиться

Попробуйте установить кодировку по умолчанию в системе utf-8 в начале сценария, чтобы все строки были закодированы с использованием этого.

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
4
ответ дан Andrei Krasutski 27 August 2018 в 22:11
поделиться

Это лучший ответ: https://stackoverflow.com/a/4027726/2159089

в linux:

export PYTHONIOENCODING=utf-8

so sys.stdout.encoding в порядке.

20
ответ дан Community 27 August 2018 в 22:11
поделиться

У меня была такая же ошибка, с URL-адресами, содержащими символы не-ascii (байты со значениями> 128)

url = url.decode('utf8').encode('utf-8')

Работала для меня, в Python 2.7, я полагаю, это назначение изменило «что-то» на внутреннее представление str, т. е. заставляет правое декодирование поддерживаемой байтовой последовательности в url и, наконец, помещает строку в utf-8 str со всей магией в нужное место. Юникод в Python - черная магия для меня. Надежда полезная

0
ответ дан Fabiano Tarlao 27 August 2018 в 22:11
поделиться

Я получал такую ​​же ошибку, и я обнаружил, что консоль не может отображать строку на другом языке. Поэтому я сделал следующие изменения кода, чтобы установить default_charset как UTF-8.

data_head = [('\x81\xa1\x8fo\x89\xef\x82\xa2\x95\xdb\x8f\xd8\x90\xa7\x93x\x81\xcb3\x8c\x8e\x8cp\x91\xb1\x92\x86(\x81\x86\x81\xde\x81\x85)\x81\xa1\x8f\x89\x89\xf1\x88\xc8\x8aO\x81A\x82\xa8\x8b\xe0\x82\xcc\x90S\x94z\x82\xcd\x88\xea\x90\xd8\x95s\x97v\x81\xa1\x83}\x83b\x83v\x82\xcc\x82\xa8\x8e\x8e\x82\xb5\x95\xdb\x8c\xaf\x82\xc5\x8fo\x89\xef\x82\xa2\x8am\x92\xe8\x81\xa1', 'shift_jis')]
default_charset = 'UTF-8' #can also try 'ascii' or other unicode type
print ''.join([ unicode(lin[0], lin[1] or default_charset) for lin in data_head ])
0
ответ дан Frits 27 August 2018 в 22:11
поделиться

Нет проблем с моим терминалом. Вышеупомянутые ответы помогли мне взглянуть в правильном направлении, но это не сработало для меня, пока я не добавил 'ignore':

fix_encoding = lambda s: s.decode('utf8', 'ignore')

Как указано в комментарии ниже, это может привести к нежелательным результатам. OTOH также может просто сделать трюк достаточно хорошо, чтобы заставить все работать, и вы не заботитесь о потере некоторых персонажей.

4
ответ дан guaka 27 August 2018 в 22:11
поделиться

Хорошо использовать приведенный ниже код в верхней части вашего скрипта в качестве предложенного Андрея Красуцкого .

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

Но я также предлагаю вам добавить строку # -*- coding: utf-8 -* на самом верху скрипта.

Опуская это, я ошибаюсь в моем случае, когда пытаюсь выполнить basic.py.

$ python basic.py
  File "01_basic.py", line 14
SyntaxError: Non-ASCII character '\xd9' in file basic.py on line 14, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Ниже приведен код, присутствующий в basic.py, который выдает над ошибкой.

код с ошибкой

from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def fill_document(doc):
    with doc.create(Section('ِش سثؤفهخى')):
        doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
        doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))

        with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
            doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')


if __name__ == '__main__':
    # Basic document
    doc = Document('basic')
    fill_document(doc)

Затем я добавил строку # -*- coding: utf-8 -*- в очень верхнюю и выполнил. Он работал.

код без ошибок

# -*- coding: utf-8 -*-
from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def fill_document(doc):
    with doc.create(Section('ِش سثؤفهخى')):
        doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
        doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))

        with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
            doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')


if __name__ == '__main__':
    # Basic document
    doc = Document('basic')
    fill_document(doc)

Спасибо.

0
ответ дан hygull 27 August 2018 в 22:11
поделиться

try:

string.decode('utf-8')  # or:
unicode(string, 'utf-8')

edit:

'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8') дает u'(\uff61\uff65\u03c9\uff65\uff61)\uff89', что правильно.

, поэтому ваша проблема должна быть у некоторых oter place, возможно, если вы попытаетесь что-то сделать с ним, произойдет неявное преобразование (может быть печать, запись в поток ...)

, чтобы сказать больше, нам нужно будет увидеть некоторые код.

23
ответ дан mata 27 August 2018 в 22:11
поделиться

BOM, для меня это часто BOM для файла

vi, используйте

:set nobomb

и сохраните его. Это почти всегда фиксирует это в моем случае

0
ответ дан Olly W 27 August 2018 в 22:11
поделиться

Я решаю эту проблему, изменяющуюся в файле settings.py с помощью «ENGINE»: 'django.db.backends.mysql', не использую 'ENGINE': 'mysql.connector.django',

-2
ответ дан rayryeng 27 August 2018 в 22:11
поделиться

Если вы работаете с удаленным хостом , посмотрите /etc/ssh/ssh_config на своем местном ПК.

Если этот файл содержит строку:

SendEnv LANG LC_*

прокомментируйте это, добавив # в начало строки. Это может помочь.

С помощью этой строки ssh отправляет переменные среды, связанные с языком, на ваш компьютер remote . Это вызывает множество проблем.

8
ответ дан Tsutomu 27 August 2018 в 22:11
поделиться

В моем случае это было вызвано сохранением моего файла Unicode с помощью «спецификации». Чтобы решить эту проблему, я взломал файл с помощью BBEdit и сделал «Сохранить как ...», выбрав для кодирования «Unicode (UTF-8)», а не то, что он пришел, с которым был «Unicode (UTF-8, с спецификацией) «

1
ответ дан user336828 27 August 2018 в 22:11
поделиться

Похоже, ваша строка закодирована в utf-8, так что же это за проблема? Или что вы пытаетесь сделать здесь ..?

Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> s2 = u'(。・ω・。)ノ'
>>> s2 == s1
True
>>> s2
u'(\uff61\uff65\u03c9\uff65\uff61)\uff89'
1
ответ дан wim 27 August 2018 в 22:11
поделиться

это работает для ubuntu 15.10:

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
1
ответ дан wlredeye 27 August 2018 в 22:11
поделиться

Просто преобразуйте текст в строку, используя str(). Работал для меня.

-2
ответ дан Zenadix 27 August 2018 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: