kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Markum
Markum
Вопрос

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1

У меня возникли некоторые проблемы при попытке закодировать строку в UTF-8. Я пробовал множество способов, включая использование string.encode('utf-8') и unicode(string), но получаю ошибку:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1: ordinal not in range(128)

Вот моя строка:

(。・ω・。)ノ

Я не понимаю, что идет не так, есть идеи?

Edit: Проблема в том, что печать строки как она есть не отображается должным образом. Также, эта ошибка, когда я пытаюсь преобразовать ее:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] 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)
103 2012-05-12T07:39:52+00:00 16
Rubens Mariuzzo
Rubens Mariuzzo
Редактировал вопрос 4-го декабря 2014 в 4:34
Программирование
python
unicode
utf-8
Решение / Ответ
Nick Craig-Wood
Nick Craig-Wood
12-го мая 2012 в 11:05
2012-05-12T11:05:58+00:00
Дополнительно
Источник
Редактировать
#16170091

Это связано с тем, что кодировка вашего терминала не установлена на 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, чтобы узнать, как сделать это изменение постоянным.

70
0
 mata
mata
12-го мая 2012 в 7:53
2012-05-12T07:53:01+00:00
Дополнительно
Источник
Редактировать
#16170089

попытаться:

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

редактировать:

'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8') gives u'(\uff61\uff65\u03c9\uff65\uff61)\uff89', which is correct.

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

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

24
0
 pepr
pepr
12-го мая 2012 в 11:43
2012-05-12T11:43:09+00:00
Дополнительно
Источник
Редактировать
#16170092

Мой +1 до мата'ы комментировать https://stackoverflow.com/a/10561979/1346705 и Ник Крейг-Вуд'с демонстрацией. Вы правильно расшифровали строку. Проблема с команду печать как он преобразует строку в кодировке Юникод в кодировку консоли, и консоль не способна отобразить строку. Попробуйте написать строку в файл и посмотреть на результат через некоторое приличный редактор, который поддерживает Unicode:

import codecs

s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
s1 = s.decode('utf-8')
f = codecs.open('out.txt', 'w', encoding='utf-8')
f.write(s1)
f.close()

Тогда вы увидите (。・ω・。)ノ.

 Community
Community
Редактировал ответ 23-го мая 2017 в 12:34
21
0
Andrei Krasutski
Andrei Krasutski
18-го ноября 2017 в 5:14
2017-11-18T17:14:44+00:00
Дополнительно
Источник
Редактировать
#16170101

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

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
9
0
 Tsutomu
Tsutomu
28-го сентября 2014 в 1:18
2014-09-28T01:18:54+00:00
Дополнительно
Источник
Редактировать
#16170095

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

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

SendEnv LANG LC_*

закомментируйте его с добавлением # во главе линии. Это могло бы помочь.

С этой линией, СШ посылает соответствующие языковые переменные среды вашего ПК для удаленного * хост. Его причины много проблемы.

8
0
fifi finance
fifi finance
25-го декабря 2013 в 3:34
2013-12-25T03:34:09+00:00
Дополнительно
Источник
Редактировать
#16170093

Никаких проблем с моего терминала. Ответов не помог мне, глядя в правильном направлении, но это не't работа для меня, пока я добавил &#39;игнор&#39;:

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

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

fifi finance
fifi finance
Редактировал ответ 27-го января 2017 в 1:40
4
0
 hygull
hygull
21-го марта 2018 в 8:14
2018-03-21T08:14:39+00:00
Дополнительно
Источник
Редактировать
#16170102

Это's прекрасно, чтобы использовать ниже код в верхней части вашего скрипта, как Андрей Krasutski предложил.

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

Но я предлагаю вам также добавить # -*- кодирование: 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)

Затем я добавил `# -- кодирование: 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)

Спасибо.

3
0
 wlredeye
wlredeye
11-го июля 2016 в 1:07
2016-07-11T13:07:00+00:00
Дополнительно
Источник
Редактировать
#16170098

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

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales
1
0
 wim
wim
12-го мая 2012 в 8:08
2012-05-12T08:08:53+00:00
Дополнительно
Источник
Редактировать
#16170090

Похоже, что ваша строка закодирована в 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
0
 user336828
user336828
20-го июня 2017 в 9:05
2017-06-20T21:05:14+00:00
Дополнительно
Источник
Редактировать
#16170100

В моем случае, он был вызван мой файл в кодировке Юникод, сохраненного С А "ОМБ" по. Чтобы решить эту проблему, я открыл файл с помощью BBEdit и сделал и"Сохранить как..." и выбирают кодирование на "Юникод (UTF-8)" и не то, что он пришел с, который был на "Юникод (UTF-8, с BOM), то"

1
0
Azam Khan
Azam Khan
10-го мая 2016 в 10:16
2016-05-10T10:16:57+00:00
Дополнительно
Источник
Редактировать
#16170097

Я получаю тот же тип ошибки, и я обнаружил, что консоль не способна отображать строку на другом языке. Отсюда я сделал ниже код, чтобы установить 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 ])
 Frits
Frits
Редактировал ответ 10-го мая 2016 в 10:55
0
0
Olly W
Olly W
19-го апреля 2018 в 1:14
2018-04-19T13:14:46+00:00
Дополнительно
Источник
Редактировать
#16170103

Бом, это's так часто спецификацию для меня

ви-файл, используйте

:set nobomb

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

0
0
Fabiano Tarlao
Fabiano Tarlao
20-го июля 2018 в 8:57
2018-07-20T20:57:49+00:00
Дополнительно
Источник
Редактировать
#16170104

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

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

Работал для меня в Python 2.7, я полагаю, что это назначение изменило 'что-то' в ул внутреннее представление, т. е. его силами право декодирование сохраненных байт последовательности в URL и, наконец, добавляет строку в поддержка UTF-8 стр с магией в нужном месте. Unicode в Python-это черная магия для меня. Надеюсь, пригодится

-1
0
 football
football
26-го февраля 2017 в 2:20
2017-02-26T14:20:08+00:00
Дополнительно
Источник
Редактировать
#16170099

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

в Linux:

export PYTHONIOENCODING=utf-8

так `в sys.поток stdout.кодирование-это нормально.

 Community
Community
Редактировал ответ 23-го мая 2017 в 12:18
-1
0
Supratim Samantray
Supratim Samantray
5-го февраля 2016 в 8:22
2016-02-05T08:22:33+00:00
Дополнительно
Источник
Редактировать
#16170096

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

 Zenadix
Zenadix
Редактировал ответ 5-го февраля 2016 в 9:21
-2
0
 user3787102
user3787102
29-го июня 2014 в 4:27
2014-06-29T04:27:53+00:00
Дополнительно
Источник
Редактировать
#16170094

я решить эту проблему не меняя в файле settings.py с 'двигатель': 'Джанго.дБ.бэкэндов.в MySQL' Дон´t использовать 'двигатель': 'базы данных MySQL.разъем.Джанго',

rayryeng  - Reinstate Monica
rayryeng - Reinstate Monica
Редактировал ответ 30-го июня 2014 в 9:26
-2
0
Похожие сообщества 30
Python beginners
Python beginners
17 345 пользователей
Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981
Открыть telegram
Python
Python
14 260 пользователей
Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/1961404
Открыть telegram
🐍 Python Stepik Chat
🐍 Python Stepik Chat
11 616 пользователей
Этот уютный чат создан для помощи в решение задач на прекрасном курсе "Поколение Python: курс для начинающих" и не только. Правила: https://t.me/pythonstepikchat/619142 Чат для оффтопа - t.me/+fqNb78zlQY81NGUy Наш канал - @kimport_this
Открыть telegram
aiogram
aiogram
8 250 пользователей
Репозиторий: https://github.com/aiogram/aiogram Сайт: https://aiogram.dev Полезная информация: https://t.me/aiogram_ru/1421485?thread=1421477
Открыть telegram
Python — вакансии и аналитика
Python — вакансии и аналитика
6 468 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Python, Flask и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @golang_jobs, @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs
Открыть telegram
Сообщество Python Программистов
Сообщество Python Программистов
5 885 пользователей
Канал: @pip_install Наши сайты: https://python-scripts.com https://selenium-python.com https://itfy.org Мы в ВК: https://vk.com/open_sourcecode Вакансии: https://t.me/python_scripts_hr
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 4 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
DE
EL
ES
ID
JA
KO
NL
PT
RU
TR
ZH
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией