python utf-8 codec can_python 字符问题'utf8' codec can't decode byte 0xe6 in position 0:

我用sphinx和django做搜索,但是搜索的时候出现这种错误:

'utf8' codec can't decode byte 0xe6 in position 0: unexpected end of data

出错信息:

Environment:

Request Method: GET

Request URL: http://www.zhima.so:233/search/%E6%89%93%E7%AE%97/

Django Version: 1.8.1

Python Version: 2.7.3

Installed Applications:

('django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'search',

'web')

Installed Middleware:

('django.middleware.common.CommonMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'django.middleware.csrf.CsrfViewMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

'search.timermiddleware.TimerMiddleware')

Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response

132. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view

110. response = view_func(request, *args, **kwargs)

File "/root/ssbc/web/views.py" in search

69. keyword.decode('utf-8'), d['offset'], d['ps'], d['category'], d['sort'])

File "/root/ssbc/search/models.py" in search

26. res = q.ask(subqueries=[q2])

File "/usr/local/lib/python2.7/dist-packages/sphinxit/core/processor.py" in ask

287. return self.connector.execute(query_batch)

File "/usr/local/lib/python2.7/dist-packages/sphinxit/core/connector.py" in execute

149. raise SphinxQLDriverException(e)

Exception Type: SphinxQLDriverException at /search/打算/

Exception Value: 'utf8' codec can't decode byte 0xe6 in position 0: unexpected end of data

views.py:

# coding: utf8

import re

import datetime

import sys

import urllib

from django.http import Http404

from django.views.decorators.cache import cache_page

from django.shortcuts import render, redirect

from lib import politics

import workers.metautils

from search.models import RecKeywords, Hash

reload(sys)

sys.setdefaultencoding('utf-8')

re_punctuations = re.compile(

u"。|,|,|!|…|!|《|》||\"|'|:|:|?|\?|、|\||“|”|‘|’|;|—|(|)|·|\(|\)| |\.|【|】|『|』|@|&|%|\^|\*|\+|\|||~|`|\[|\]")

@cache_page(600)

def index(request):

reclist = RecKeywords.objects.order_by('-order')

return render(request, 'index.html', {'reclist': reclist})

@cache_page(3600 * 24)

def hash(request, h):

try:

res = Hash.objects.list_with_files([h])

j = res[0]

except:

raise Http404(sys.exc_info()[1])

d = {'info': j}

d['keywords'] = list(

set(re_punctuations.sub(u' ', d['info']['name']).split()))

if 'files' in d['info']:

d['info']['files'] = [

y for y in d['info']['files'] if not y['path'].startswith(u'_')]

d['info']['files'].sort(key=lambda x: x['length'], reverse=True)

d['magnet_url'] = 'magnet:?xt=urn:btih:' + d['info']['info_hash'] + \

'&' + urllib.urlencode({'dn': d['info']['name'].encode('utf8')})

d['download_url'] = 'http://www.haosou.com/s?' + \

urllib.urlencode(

{'ie': 'utf-8', 'src': 'ssbc', 'q': d['info']['name'].encode('utf8')})

return render(request, 'info.html', d)

@cache_page(1800)

def search(request, keyword=None, p=None):

if not keyword:

return redirect('/')

if politics.is_sensitive(keyword):

return redirect('/?' + urllib.urlencode({'notallow': keyword.encode('utf8')}))

keyword = keyword

print keyword

# keyword = unicode( keyword , errors='ignore')

d = {'keyword': keyword}

d['words'] = list(set(re_punctuations.sub(u' ', d['keyword']).split()))

try:

d['p'] = int(p or request.GET.get('p'))

except:

d['p'] = 1

d['category'] = request.GET.get('c', '')

d['sort'] = request.GET.get('s', 'create_time')

d['ps'] = 10

d['offset'] = d['ps'] * (d['p'] - 1)

res = Hash.objects.search(

keyword.decode('utf-8'), d['offset'], d['ps'], d['category'], d['sort'])

print res

d.update(res)

# Fill info

ids = [str(x['id']) for x in d['result']['items']]

if ids:

items = Hash.objects.list_with_files(ids)

for x in d['result']['items']:

for y in items:

if x['id'] == y['id']:

x.update(y)

x['magnet_url'] = 'magnet:?xt=urn:btih:' + x['info_hash'] + \

'&' + \

urllib.urlencode({'dn': x['name'].encode('utf8')})

x['maybe_fake'] = x['name'].endswith(

u'.rar') or u'BTtiantang.com' in x['name'] or u'liangzijie' in x['name']

if 'files' in x:

x['files'] = [

z for z in x['files'] if not z['path'].startswith(u'_')][:5]

x['files'].sort(

key=lambda x: x['length'], reverse=True)

else:

x['files'] = [

{'path': x['name'], 'length': x['length']}]

# pagination

w = 10

total = int(d['result']['meta']['total_found'])

d['page_max'] = total / \

d['ps'] if total % d['ps'] == 0 else total / d['ps'] + 1

d['prev_pages'] = range(

max(d['p'] - w + min(int(w / 2), d['page_max'] - d['p']), 1), d['p'])

d['next_pages'] = range(

d['p'] + 1, int(min(d['page_max'] + 1, max(d['p'] - w / 2, 1) + w)))

d['sort_navs'] = [

{'name': '按收录时间', 'value': 'create_time'},

{'name': '按文件大小', 'value': 'length'},

{'name': '按相关性', 'value': 'relavance'},

]

d['cats_navs'] = [{'name': '全部', 'num': total, 'value': ''}]

for x in d['cats']['items']:

v = workers.metautils.get_label_by_crc32(x['category'])

d['cats_navs'].append(

{'value': v, 'name': workers.metautils.get_label(v), 'num': x['num']})

return render(request, 'list.html', d)

def hash_old(request, h):

return redirect('/hash/' + h, permanent=True)

def search_old(request, kw, p):

return redirect('list', kw, p)

@cache_page(3600 * 24)

def howto(request):

return render(request, 'howto.html', {})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值