Форум сайта python.su
Привет.
Есть следующий код
# просто это так в основном скрипте и, пожалуй, тут тоже try:except оставлю try: for f in os.listdir(path): print f, chardet.detect(f)['encoding'], f.decode(chardet.detect(f)['encoding']) except Exception, e: print str(e)
qiwi2.sql ascii qiwi2.sql www ascii www ’ҐЄбв®ўл© ¤®Єг¬Ґв.txt windows-1252 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
Офлайн
передавайте в listdir не строку, а объект unicode
p.s. chardet не всегда верно определяет кодировку - поэтому аккуратно с ней
Офлайн
передавайте в listdir не строку, а объект unicodeДа, так уже пробовал, результат был тот же, поэтому не вставил в пример.
p.s. chardet не всегда верно определяет кодировку - поэтому аккуратно с нейЯ, к сожалению, больше аналогов не знаю
Офлайн
Офлайн
Все равно ничего не выходит
Смотрите, я знаю, что decode декодирует из указанной кодировки в unicode, а encode уже кодирует unicode в указанную кодировку.
В вашем примере я не особо понял, что вы пытались показать, возможно, вы хотели из unicode сделать utf-8, вот только функцию надо брать encode(), так или иначе, я практически тоже самое пытаюсь сделать, но у меня это не получается.
Офлайн
Хорошо, вЫложите весь код сюда
Офлайн
Хорошо. Я взял код коннектора от одной JS библиотеки. Вот ее код
# # jQuery File Tree # Python/Django connector script # By Martin Skou # import os import urllib def dirlist(request): r=['<ul class="jqueryFileTree" style="display: none;">'] try: r=['<ul class="jqueryFileTree" style="display: none;">'] d=urllib.unquote(request.POST.get('dir','c:\\temp')[code python][/code]) for f in os.listdir(d): ff=os.path.join(d,f) if os.path.isdir(ff): r.append('<li class="directory collapsed"><a href="#" rel="%s/">%s</a></li>' % (ff,f)) else: e=os.path.splitext(f)[1][1:] # get .ext and remove dot r.append('<li class="file ext_%s"><a href="#" rel="%s">%s</a></li>' % (e,ff,f)) r.append('</ul>') except Exception,e: r.append('Could not load directory: %s' % str(e)) r.append('</ul>') return HttpResponse(''.join(r))
path_to_parse = os.path.realpath(base_path + path) r = [u'<ul class="jqueryFileTree" style="display: none;">'] try: r = [u'<ul class="jqueryFileTree" style="display: none;">'] for f in os.listdir(path_to_parse): # if chardet.detect(f)['encoding'] != 'ascii': # f = f.decode(chardet.detect(f)['encoding']).encode('utf-8') ff = os.path.join(path_to_parse, f) ff2 = ff.replace(base_path, '') if os.path.isdir(ff): r.append(u'<li class="directory collapsed"><a href="#" rel="%s">%s</a></li>' % (ff2, f)) else: e = os.path.splitext(f)[1][1:] r.append(u'<li class="file ext_%s"><a href="#" data-ext="%s" rel="%s" id="file">%s</a></li>' % (e, e, ff2, f)) r.append(u'</ul>') except Exception, e: r.append(u'Could not load directory: %s' % str(e)) r.append(u'</ul>') return ''.join(r)
Отредактировано kise97 (Ноя. 3, 2013 12:34:32)
Офлайн
Я просил ВЕСЬ код.
кодировку типа
# -*- coding: utf-8 -*-
Офлайн
Весь код очень огромен, потому что я пишу под фласком в стиле джанги.
Да, конечно же указал.
Офлайн
Тогда извините, я не смогу запустить Вашу программу на своей машине и проследить за ошибкой.
Не делайте огромных кодов
Офлайн