django:从表单向googmaps发送unicode地址

时间:2012-01-10 14:41:42

标签: python django google-maps unicode

我正在使用 googlemaps http://py-googlemaps.sourceforge.net/来显示一些旅行信息。我通过表单发送 start_address end_address 并计算路由服务器端。

当我在地址中使用基本的ascii字符时一切正常,但如果我使用狂野的克罗地亚字符,例如'čćšž'我得到“'ascii'编解码器无法编码字符u '\ u010d'位置......“。

如果我使用

from googlemaps import GoogleMaps
directions = GoogleMaps().directions(smart_str(start_address), smart_str(end_address))

作为命令在shell中运行良好,但不是当我在网站上运行测试服务器时。 start_address和end_address都是unicode类型。

那么为了让它能够在整个unicode中正常运行,我怎么能形成start_address呢?

修改

在摆弄更多之后,这是最终有效的代码:

from django.shortcuts import render_to_response
from django.utils.encoding import smart_unicode, smart_str
from googlemaps import GoogleMaps

def calculations(request):
    if request.method == 'POST':
        trip = {}
        start_address = smart_str(request.POST.get('start_address'))
        end_address = smart_str(request.POST.get('end_address'))
        directions = GoogleMaps().directions(start_address, end_address)
        trip['length'] = directions['Directions']['Distance']['html']
        trip['duration'] = directions['Directions']['Duration']['html']
        return render_to_response( 'index.html', {'trip':trip, }, context_instance = RequestContext(request) )

您可以考虑关闭该问题:)

1 个答案:

答案 0 :(得分:0)

ascii' codec can't encode character u'\u010d' in position...表示,django尝试从Unicode转换为Ascii。您的settings.DEFAULT_CHARSET值是多少?

尝试设置settings.DEFAULT_CHARSET = 'UTF-8'