ANSI, ASCII, Unicode и кодировка путаница с Python - PullRequest
1 голос
/ 24 июля 2010

Я с удовольствием использовал BeautifulSoup, и я также использую текстовый файл в качестве входных параметров моего скрипта Python.

Затем я наткнулся на знаменитую ошибку «UnicodeEncodeError».

I 'Я читал вопросы здесь в SO, но я все еще в замешательстве.

Какое отношение ASCII имеет ко всем этим?Какую кодировку я использую в своем текстовом редакторе (Notepad ++)?ANSI?UTF-8?Декодирование строки в ASCII, кажется, не всегда работает (я предполагаю, что строка находится в другой кодировке от BeautifulSoup).Как мне это исправить?

В любом случае любая помощь и разъяснения будут с благодарностью.

Спасибо!

edit: читая документы BeautifulSoup, он говорит, что использует только юникод, ноЯ все еще получаю ошибки Unicode: (

  File "C:\Python26\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u300d' in position
 3: character maps to <undefined>

Ответы [ 3 ]

2 голосов
/ 24 июля 2010

ANSI не является кодировкой символов (на обычном языке это относится к определенным escape-последовательностям, хотя это, конечно, аббревиатура для Американского национального института стандартов). Вы можете установить кодировку в Notepad ++ (и проверить, какую кодировку вы используете) - надеюсь, utf-8, потому что это универсальная кодировка (позволяет вам представлять любую точку Unicode). Вы строите юникод из своего текста в кодировке utf-8 с явным вызовом метода decode или читаете файл как юникод с codecs.open (оба требуют, чтобы вы указали имя кодировки - опять же, надеюсь, «utf8»).

1 голос
/ 23 января 2014

На данный момент (2014, 1, 23) для Notepad ++ (NPP) по-прежнему существует множество недавних / неразрешенных сообщений об ошибках / обсуждений, касающихся использования ANSI в качестве термина кодирования Notepad ++.

ПРОБЛЕМА

Google: notepad ++ и кодировка ANSI

Результаты:

# 4095 "ANSI as UTF-8", вводящий в заблуждение

# 124 кодировка ANSI и немецкие буквы

Кодировка, которую Notepad ++ просто называет «ANSI», кто-нибудь знает, как назвать ее для Ruby?

Форум Notepad ++ - Поиск в обсуждении: Кодировка ANSI

РЕШЕНИЕ

Следующая дискуссия на форуме АЭС, кажется, указывает на лучшее РЕШЕНИЕ для меня.

См. Обнаружение кодирования, ANSI (Windows 1252) и UTF-8 (без спецификации)

Настройки -> Новый документ> Кодировка> UTF8 без спецификации » Применить к открытым файлам ANSI

Я ПРОВЕРИЛ вышеизложенное как ПРОТИВОСТОЯЩИЙ автору, который снял его.

Затем я начинаю свой скрипт на Python следующим образом.

#!/usr/bin/python
# -*- coding: utf-8 -*-
1 голос
/ 24 июля 2010

Какое отношение ASCII имеет ко всем этим?

Python не может выяснить, какая кодировка использовалась для хранения текста, поэтому он принимает ascii по умолчанию.Однако ASCII определяет только первые 128 символов, поэтому все, что находится за пределами, приводит к ошибке декодирования (что на самом деле хорошо, поскольку не позволяет использовать неправильно декодированные строки вокруг).

Большую часть времени ваша строка будетв utf-8, так как это самый распространенный способ кодирования Unicode, поэтому обычно безопасно делать s.decode('utf-8') на str строках типа (или использовать вызов unicode(s, 'utf-8'))

Есливы не знаете заранее, какой тип текста имеет кодировка, и он не предоставляет метаданных кодирования, вы можете попробовать использовать модуль chardet.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...