python编码json时如何处理'æøå

2 投票
1 回答
877 浏览
提问于 2025-04-18 02:36

我正在尝试从一个API获取坐标,但其中一个json对象包含丹麦字母,我一直收到错误。这是我现在的代码:

# -*- coding: utf-8 -*-
import urllib2
import json
import codecs

url='http://geo.oiorest.dk/adresser.json?postnr=1577&vejnavn=bernstorffsgade&husnr=16'

addressline = "%s, %s"

try:
    data = urllib2.urlopen(url).read().decode('utf-8')
    adresser = json.loads(data, encoding='utf-8')

    for adresse in adresser:
        print addressline % \
            (adresse['etrs89koordinat']['øst'],
             adresse['etrs89koordinat']['nord'])

except urllib2.HTTPError, e:
    print "HTTP error: %d" % e.code
except urllib2.URLError, e:
    print "Network error: %s" % e.reason.args[1]

我遇到的错误是:

KeyError: '\xc3\xb8st'

1 个回答

3

你的解码数据里包含了Unicode字符串,所以你需要用Unicode字符串来查找东西:

print addressline % \
    (adresse[u'etrs89koordinat'][u'øst'],
     adresse[u'etrs89koordinat'][u'nord'])

(你可能会发现,如果字符串里只包含没有重音的字符,无论你是否使用Unicode字符串,查找都能正常工作,这是因为Unicode和你默认编码之间会自动转换,但如果是带重音的字符就不行了。)

撰写回答