UnicodeDecodeError: кодек ascii не может декодировать байт 0x96 в позиции 23: порядковый номер не в диапазоне (128) [дубликат]

Самое простое универсальное решение проблемы: не стесняйтесь указывать display:none в вашем CSS, однако вы можете изменить его на block (или что-то еще) с помощью JavaScript, а затем вам также придется добавить класс для вашего элемента, который действительно делает переход с помощью setTimeout () . Вот и все.

I.e.:

<style>
#el {
    display: none;
    opacity: 0;
}
#el.auto-fade-in {
    opacity: 1;
    transition: all 1s ease-out; /* future, future, please come sooner! */
    -webkit-transition: all 1s ease-out;
    -moz-transition: all 1s ease-out;
    -o-transition: all 1s ease-out;
}
</style>

<div id=el>Well, well, well</div>

<script>
var el = document.getElementById('el');
el.style.display = 'block';
setTimeout(function () { el.className = 'auto-fade-in' }, 0);
</script>

Проверено в последних разумных браузерах. Очевидно, что он не должен работать в IE9 или ранее.

23
задан MattDMo 9 October 2015 в 19:11
поделиться

3 ответа

Многие веб-страницы закодированы неправильно. Для синтаксического анализа HTML try BeautifulSoup , поскольку он может обрабатывать многие типы неправильных HTML, которые находятся в дикой природе.

Beautiful Soup - это парсер Python HTML / XML, предназначенный для быстрого оборотные проекты, такие как скрипинг экрана. Три функции делают его мощным:

  1. Красивый суп не задушит, если вы дадите ему плохую разметку. Он дает дерево синтаксического анализа, которое делает примерно такой же смысл, как и исходный документ. Это обычно достаточно хорошо, чтобы собрать нужные данные и убежать.
  2. Beautiful Soup предоставляет несколько простых методов и идиомы Pythonic для навигации, поиска и изменения дерева синтаксического анализа: инструментарий для анализа документа и извлекая то, что вам нужно. Вам не нужно создавать собственный парсер для каждого приложения.
  3. Beautiful Soup автоматически преобразует входящие документы в Unicode и исходящие документы в UTF-8. Вам не нужно думать о кодировках, если в документе не указывается кодировка, а Beautiful Soup не может автоопределить ее. Затем вам нужно указать исходную кодировку.

Акцент мой.

6
ответ дан Mark Byers 25 August 2018 в 07:39
поделиться

Сайт «http://www.homestead.com» не претендует на отправку вам utf-8, на самом деле ответ считается iso-8859-1:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Вы должны использовать правильную кодировку для страницы, которую вы действительно получили, а не просто гадать случайным образом.

3
ответ дан Duncan 25 August 2018 в 07:39
поделиться

Байт в 15344 равен 0x96. Предположительно, в позиции 15343 имеется либо однобайтная кодировка символа, либо последний байт многобайтовой кодировки, что делает 15344 началом символа. 0x96 находится в двоичном коде 10010110, и любой байт, соответствующий шаблону 10XXXXXX (от 0x80 до 0xBF), может быть только вторым или последующим байтом в кодировке UTF-8.

Следовательно, поток является либо не UTF-8, либо else поврежден.

Изучая URI, на который вы ссылаетесь, мы находим заголовок:

Content-Type: text/html

Поскольку не указано кодирование, мы должны использовать значение по умолчанию для HTTP, которое ISO-8859-1 (также известный как «Latin 1»).

Изучая контент, мы находим строку:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

. Это механизм возврата для людей, по какой-то причине не удалось правильно настроить заголовки HTTP. На этот раз нам явно сказано, что кодировка символов - это ISO-8859-1.

Как таковая, нет никаких оснований ожидать, что ее читают как UTF-8.

Для дополнительного удовольствия хотя, если учесть, что в ISO-8859-1 0x96 кодируется U + 0096, который является управляющим символом «НАЧАЛО ОХРАНЯЕМЫХ РАЙОНОВ», мы обнаруживаем, что ISO-8859-1 не является правильным. Кажется, что люди, создавшие страницу, сделали для вас аналогичную ошибку.

Из контекста, казалось бы, они фактически использовали Windows-1252, так как в этой кодировке 0x96 кодирует U + 2013 (EN-DASH, выглядит например ).

Итак, чтобы проанализировать эту конкретную страницу, которую вы хотите декодировать в Windows-1252.

В более общем плане вы хотите изучить заголовки при выборе кодировок символов и хотя в этом случае это может быть неверно (или, может быть, не более, чем несколько «кодеков ISO-8859-1» на самом деле являются Windows-1252), вы будете исправлять чаще. Вам все равно нужно что-то уловить, как это, читая резервную копию. Метод decode принимает второй параметр под названием errors. По умолчанию это 'strict', но вы также можете иметь 'ignore', 'replace', 'xmlcharrefreplace' (не подходит), 'backslashreplace' (не подходит), и вы можете зарегистрировать свой собственный обработчик возврата с помощью codecs.register_error().

22
ответ дан Jon Hanna 25 August 2018 в 07:39
поделиться
Другие вопросы по тегам:

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