1

Unicode データを外部 Web サービスに保存しようとしています。

を保存しようとすると、外部システムにæ-ø-å保存されます。æ-ø-Ã¥

編集:

(私の名の値はJørn) (django からの値J\\xf8rn)

firstname.value=user_firstname=Jørn

エンコードを使用しようとした場合の結果は次のとおりです。

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,
    })

これが私の仕事です:

from suds.client import Client

@task()
def update_webservice(user_firstname, user_lastname):

    membermap = client.factory.create('ns2:Map')

    firstname = client.factory.create('ns2:mapItem')
    firstname.key="Firstname"
    firstname.value=user_firstname

    lastname = client.factory.create('ns2:mapItem')
    lastname.key="Lastname"
    lastname.value=user_lastname


    membermap.item.append(firstname)
    membermap.item.append(lastname)


    d = dict(CustomerId='xxx', Password='xxx', PersonId='xxx', ContactData=membermap)


    try:
        #Send updates to SetPerson function
        result = client.service.SetPerson(**d)
    except WebFault, e:
        print e  

データを正しく保存するにはどうすればよいですか?

4

2 に答える 2

0

外部システムは、UTF-8 を Latin-1 または Windows-1252 であるかのように解釈しています。良くないね。

ASCII のエンコードまたはデコードは役に立ちません。あなたの文字列は間違いなくプレーンASCIIではありません。

運が良ければ、その Web サービスの API に、UTF-8 で送信していることを伝えるオプションが欠けているだけです。

そうでない場合は、かなりのメンテナンスの頭痛の種になりますが、返されたものを修正することはできます。Web サービスは、UTF-8 としてエンコードされた文字列を取得し、Latin-1 としてデコードしたため、その逆を行うだけで済みます。

user_firstname = user_firstname.encode('latin-1').decode('utf-8')
于 2013-08-28T06:07:59.097 に答える