python - 解析从 URL 读取的 JSON 时出现问题

标签 python unicode encoding urllib2 simplejson

我遇到了一个我认为有简单解决方案的问题。

我正在编写一个 Python 脚本,它从 URL 读取 JSON 字符串并对其进行解析。为此,我使用了 urllib2 和 simplejson。

我遇到的问题与编码有关。我正在阅读的 URL 没有明确说明它的编码方式(据我所知),它返回一些冰岛字符。我不能给出我从这里读取的 URL,但我已经在我自己的服务器上设置了一个示例 JSON 数据文件,而且我在读取它时也遇到了问题。 这是文件:http://haukurhaf.net/json.txt

这是我的代码:

# coding: utf-8
#!/usr/bin/env python
import urllib2, re, os
from BeautifulSoup import BeautifulSoup
import simplejson as json

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'

def fetchPage(url):
    req = urllib2.Request(url)
    req.add_header('User-Agent', user_agent)
    response = urllib2.urlopen(req)
    html = response.read()
    response.close()
    return html

html = fetchPage("http://haukurhaf.net/json.txt")
jsonData = json.JSONDecoder().decode(html)

JSON 解析器崩溃并显示此错误消息:UnicodeDecodeError:“utf8”编解码器无法解码位置 35 中的字节 0xe1:连续字节无效

由于我无法控制保存 JSON 数据的服务器,因此我无法控制它发送的编码 header 。我希望我能以某种方式解决这个问题。

有什么想法吗?

最佳答案

文件使用 Latin-1 而非 UTF-8 编码,因此您必须指定编码:

jsonData = json.JSONDecoder('latin1').decode(html)

顺便说一句:html 是 JSON 文档的错误名称...

关于python - 解析从 URL 读取的 JSON 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449155/

相关文章:

Python通过json返回一个字符串

mysql - 删除经典 ASP/VBScript 中的四字节 UTF-8 字符(MySQL 相关)

visual-studio-2010 - 使用 unicode 保存文件时 Emacs 加载字符集映射失败

java - 错误的 xml 编码

c# - 将流上的编码更改为 UTF-8 (MemoryMappedViewStream)

python - Matplotlib 默认不会显示居中的多边形图?

python - Heroku 免费层,用于在一个应用程序中实现不间断的 Web 和工作进程

python - python中有matlab中digits()和vpa()函数的对应函数吗?

java - 使用 RSA 的加密套接字连接 java(IllegalArgumentException : Illegal base64 character 10)

python - Django 命名空间 URL 和参数