Эта ошибка появляется уже второй раз. Первый раз я просто поменял формат в некоторых ячейках с "Markdown" "Raw text", в других ячейках обнаружились "неправильные html теги",
например:
например:
In [2]:
# </br> вместо <br/>
Очевидно, что nbconvert формирует теги вокруг ячеек того или иного вида..., но как могут возникнуть проблемы с чтением непонятных символов? Вот сообщение из консоли:
In []:
C:\Users\kiss\Documents\IPython Notebooks\web\Temp_1>ipython nbconvert с2_28_1.ipynb
Traceback (most recent call last):
File "C:\Users\kiss\Anaconda\Scripts\ipython-script.py", line 5, in <module>
sys.exit(start_ipython())
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\__init__.py", line 118, in start_ipython
return launch_new_instance(argv=argv, **kwargs)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\config\application.py", line 544, in launch_instance
app.initialize(argv)
File "<string>", line 2, in initialize
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\config\application.py", line 89, in catch_config_error
return method(app, *args, **kwargs)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\terminal\ipapp.py", line 312, in initialize
super(TerminalIPythonApp, self).initialize(argv)
File "<string>", line 2, in initialize
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\config\application.py", line 89, in catch_config_error
return method(app, *args, **kwargs)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\core\application.py", line 362, in initialize
self.parse_command_line(argv)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\terminal\ipapp.py", line 307, in parse_command_line
return super(TerminalIPythonApp, self).parse_command_line(argv)
File "<string>", line 2, in parse_command_line
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\config\application.py", line 89, in catch_config_error
return method(app, *args, **kwargs)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\config\application.py", line 463, in parse_command_line
self.argv = list(argv)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 315, in __set__
new_value = self._validate(obj, value)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 323, in _validate
return self.validate(obj, value)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 1215, in validate
value = self.validate_elements(obj, value)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 1291, in validate_elements
return super(List, self).validate_elements(obj, value)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 1225, in validate_elements
v = self._trait.validate(obj, v)
File "C:\Users\kiss\Anaconda\lib\site-packages\IPython\utils\traitlets.py", line 1028, in validate
return unicode(value)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf1 in position 0: ordinal not in range(128)
C:\Users\kiss\Documents\IPython Notebooks\web\Temp_1>
Поскольку накануне я экспериментировал с вызовами команд консоли из Notebook (!dir - распечатала директорию, но с крякозябами вместо кириллицы). Я поэкспериментировал с !chcp chcp, менял кодировки... Вот рекомендации по настройке кодировок консоли.
Не "повредил" ли я этим работу консоли?
Но первым делом я решил проверить, как работает мой конвертер и конвертировал этот файл... точнее, все ячейки выше этой строчки, все прошло нормально, вот сообщения из консоли:
Не "повредил" ли я этим работу консоли?
Но первым делом я решил проверить, как работает мой конвертер и конвертировал этот файл... точнее, все ячейки выше этой строчки, все прошло нормально, вот сообщения из консоли:
In []:
C:\Users\kiss\Documents\IPython Notebooks\web\Temp_1>ipython nbconvert c2_nbconvert_err1.ipynb
[NbConvertApp] Using existing profile dir: u'C:\\Users\\kiss\\.ipython\\profile_default'
[NbConvertApp] Converting notebook c2_nbconvert_err1.ipynb to html
[NbConvertApp] Support files will be in c2_nbconvert_err1_files\
[NbConvertApp] Loaded template html_full.tpl
[NbConvertApp] Writing 209190 bytes to c2_nbconvert_err1.html
Поиск в интернет дал вот этот материал codec can't decode byte 0xf1 in position 0: ordinal not in range(128)
In [3]:
#Теперь выполняем упражнение из ссылки выше
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
У меня на компьютере с кодеками все нормально... В чем же причина ошибки? The UnicodeDecodeError normally happens when decoding an str string from a certain coding.
In [4]:
"a".decode("utf-8")
Out[4]:
In [6]:
"\xf1".decode("utf-8")
In [9]:
"a\xf1".decode("utf-8", "replace")
Out[9]:
In [7]:
"\u04412_28_1".decode("utf-8")
Out[7]:
...encode converts a unicode object to a string object
In [10]:
u"你好".encode("utf8")
Out[10]:
In [11]:
print _
In [12]:
'\xe4\xbd\xa0\xe5\xa5\xbd'.decode("utf-8")
Out[12]:
In [13]:
print _
Кажется ответ найден. Вот подсказка: How can I display native accents to languages in console in windows? First of all, in Python 2.x you can't encode a str that has non-ASCII characters. You have to write
In [15]:
u"Español\nPortuguês\nItaliano".encode('utf-8')
Out[15]:
In [16]:
print _
Using UTF-8 at the Windows console is difficult.
You have to set the Command Prompt font to a Unicode font (of which the only one available by default is Lucida Console), or else you get IBM437 encoding anyway.
chcp 65001
Modify encodings._aliases to treat "cp65001" as an alias of UTF-8.
And even then, it doesn't seem to work right.
You have to set the Command Prompt font to a Unicode font (of which the only one available by default is Lucida Console), or else you get IBM437 encoding anyway.
chcp 65001
Modify encodings._aliases to treat "cp65001" as an alias of UTF-8.
And even then, it doesn't seem to work right.
Попробуем резюмировать¶
При работе надо текстом (файлом) я несколько раз переключал кодировку консоли (чтобы убрать крякозябы). Если открыть файл c2_28_1.ipynb, то можно увидеть там строчки вида "source": "41243e43743c43e......" Это кодировка utf-8 Как 'ascii' codec брал из браузера строку кириллицы и переводил ее из кодировски cp 866 в utf-8 ? А потом я заставил его другие строки переводить из cp65001 в utf-8...
Казалось бы, ну и что? utf-8 и в Африке utf-8... Только вот... не так все просото... Если я переключаю кодироку в браузере, то страница ноутбук воспроизводится у меня без ошибок (?!?). Т.е., сервер http://127.0.0.1:8888/1f1cca2a-2f7b-4f96-9bc9-b9877ff1def7# берет страницу (из кэша?) и отдает браузеру в требуемой кодировке.
Ну и что? Все должно работать... Да, пожалуй я эту задачку не решу без понимания utf в Python... Начал читать и конспектировать соответствующий раздел у Лутца... А этот пост заканчиваем, поскольку решение найдено (случайно)
Решение проблемы: В ИМЕНИ ФАЙЛА ЗАМЕНИТЬ "c2_28_1.ipynb" первую букву "с" на латинсткую (была кириллица). В самом файле должна быть запись:¶
In []:
...
"metadata": {
"name": "c2_28_1" # Здесь вместо латиницы "c" стояли символы utf-8 для кириллицы - буквы эс
...
Комментариев нет:
Отправить комментарий