Возникла непонятная проблема кодировки при записи в словарь
Есть html файл примерно такого вида:
<h3> Текст 1 </h3>
<p> ...<b>в первом абзаце</b> ....</p>
<p> ... </p>
<p> ...<b>фрагмент 1</b> <b>фрагмент 2</b>....</p>
<h3> Текст n </h3>
...
<h3> Конец </h3>
html разбираю с помощью BeautifulSoup
информацию и фрагменты храню в словаре вида text = [, , ], где len(text) - количество абзацев в i-том тексте
Возникает проблема кодировки. При записи строки извлекаемой из <b> - все нормально,
При печати всего словаря - посимвольные кракозябы (\xd1\x83\xd0\). Но могу понять где и почему.
Помогите, пожалуйста, разобраться.
# -*- coding: utf-8 -*-
filename = 'C:/work/fulltest.htm'
html_doc = open(filename, 'r')
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_doc)
#подсчет заголовков == количество текстов + 1
count_h = soup.body.findAll('h3')
h = soup.body.find('h3') #первый заголовок в файле == первый текст
texts = {} #словарь вида [nt] -> [[s, s],[s],[s, s, s]]
i = 0
while i < len(count_h) - 1 :
pars = [] # содержание абзацев текста
while h.nextSibling.nextSibling.name != 'h3':
bolds = h.findAll('b') # все выделенные фрагменты абзаца
s_bolds = [] #тут храним строки из b.string
for j in range(len(bolds)) :
#print bolds[j].string
s_bolds.append(str(bolds[j].string).decode('utf8')) #переводим в строчку и храним не ссылку
print s_bolds[j] # выдает 'в первом абзаце'
h = h.nextSibling.nextSibling #переходим на следующий элемент
pars.append(s_bolds)
texts[i] = pars
i += 1 # следующий текст (h3)
h = h.nextSibling.nextSibling #переходим на следующий элемент
print texts # {выдает '0: [[], [u`\u0443\u043f ... '
ps: В питоне разбираюсь второй день, очень неопытный программист. Дальнейшее использование этого словаря - запись в sqlite и подсчет совпадений выделенных фрагментов в многих файлах. Возможно, словари - не лучшее решение для хранения этих данных, буду рада советам как это можно улучшить.