将字符串转换为正确的字符

2024-10-01 17:32:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将unicode数据保存到外部Web服务。在

当我试图保存æ-ø-å时,它在外部系统中被另存为æ-ø-Ã¥。在

编辑:

(我的名字值是Jørn)(django的值J\\xf8rn

firstname.value=user_firstname=Jørn

如果我尝试使用encode,以下是我的结果:

firstname.value=user_firstname.encode('ascii', 'replace')=J?rn

firstname.value=user_firstname.encode('ascii', 'xmlcharrefreplace')=Jørn

firstname.value=user_firstname.encode('ascii', 'backslashreplace')=J\xf8rn

firstname.value=user_firstname.encode('ascii', 'ignore')=我使用ignore时出现unicode错误。在

用于更新用户的我的表单:

def show_userform(request):
    if request.method == 'POST':

        form = UserForm(request.POST, request.user)


        if form.is_valid():
            u = UserProfile.objects.get(username = request.user)


            firstname = form.cleaned_data['first_name']
            lastname = form.cleaned_data['last_name']

            tasks.update_webservice.delay(user_firstname=firstname, user_lastname=lastname)


            return HttpResponseRedirect('/thank-you/')

    else:
        form = UserForm(instance=request.user) # An unbound form

    return render(request, 'myapp/form.html', {
        'form': form,
    })

我的任务是:

^{pr2}$

要正确保存数据,我需要做些什么?在


Tags: 数据formifvaluerequestasciiunicodern
2条回答

您的外部系统正在将UTF-8解释为拉丁语-1,或者可能是Windows-1252。那太糟糕了。在

编码或解码ASCII没有帮助。你的字符串绝对不是纯ASCII。在

如果幸运的话,只不过是在web服务的API中缺少了一些选项,通过这个选项可以告诉它您正在发送UTF-8。在

如果不是的话,你的手会很头疼,但是你仍然可以修复你得到的东西。web服务将您编码为UTF-8的字符串解码为Latin-1,因此您只需执行与此相反的操作:

user_firstname = user_firstname.encode('latin-1').decode('utf-8')

str类型使用decodeencode方法。 例如:

x = "this is a test" # ascii encode 
x = x.encode("utf-8") # utf-8 encoded
x = x.decode("utf-8") # ascii encoded

相关问题 更多 >

    热门问题