答案 0 :(得分:83)
您尝试解析为JSON的字符串未以UTF-8编码。最有可能的是它是用ISO-8859-1编码的。请尝试以下方法:
json.loads(unicode(opener.open(...), "ISO-8859-1"))
这将处理可能在JSON消息中获得的任何变音符号。
你应该阅读Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。我希望它能澄清一些围绕Unicode的问题。
答案 1 :(得分:6)
我的解决方案有点滑稽。我从未想过它会像使用UTF-8编解码器一样容易保存。我使用的是notepad ++(v5.6.8)。我没注意到我用ANSI保存了它编解码器最初。我正在使用单独的文件来放置所有本地化的字典。我在Notepad ++的'Encoding'选项卡下找到了我的解决方案。我选择'在没有BOM的UTF-8中编码'并保存它。它的工作非常出色。
答案 2 :(得分:4)
您看到的错误意味着您从远程端收到的数据不是有效的JSON。 JSON(根据规范)通常是UTF-8,但也可以是UTF-16或UTF-32(大端或小端)。您看到的确切错误意味着数据的某些部分不是有效的UTF-8(也不是UTF-16或UTF-32,因为那些会产生不同的错误。)
也许您应该检查从远程端收到的实际响应,而不是盲目地将数据传递给json.loads()
。现在,您正在将响应中的所有数据读入字符串并假设它是JSON。而是,检查响应的内容类型。确保网页实际上声称为您提供JSON,而不是,例如,不是 JSON的错误消息。
(另外,在检查响应后使用json.load()
通过传递opener.open()
返回的类文件对象,而不是将所有数据读入字符串并将其传递给json.loads()
。 )
答案 3 :(得分:3)
将编码更改为Latin1 / ISO-8859-1的解决方案解决了我在tex4ht的输出上调用html2text.py时遇到的问题。我使用它来对LaTeX文档进行自动字数统计:tex4ht将它们转换为HTML,然后将html2text.py剥离为纯文本,以便通过wc -w进一步计算。现在,例如,如果德国“变形金刚”通过文献数据库条目进入,那么该过程将失败,因为html2text.py会抱怨,例如。
UnicodeDecodeError:'utf8'编解码器无法解码位置32243-32245中的字节:无效数据
现在这些错误随后会特别难以追踪,基本上你想在你的参考部分中使用变音符号。 html2text.py中的一个简单更改来自
data = data.decode(encoding)
到
data = data.decode(“ISO-8859-1”)
解决了这个问题;如果您使用HTML文件作为第一个参数调用脚本,您也可以将编码作为第二个参数传递并保留修改。
答案 4 :(得分:1)
以防有人遇到同样的问题。我正在使用带有YouCompleteMe的vim,无法使用此错误消息启动ycmd,我所做的是:export LC_CTYPE="en_US.UTF-8"
,问题已消失。
答案 5 :(得分:1)
将其粘贴到命令行:
public static void main(String[] args) {
int sum = 0;
double average;
double lowerbound = 1;
double upperbound = 100;
double number = lowerbound;
//double remainder = 1;
//loop
while(number<= upperbound)
if (number%2==1){
sum += number;
//remainder = number%2;
System.out.println(number);
number++;
}else{
number++;
}
average = sum/upperbound;
System.out.println();
System.out.println ("These are your sums and averages");
System.out.println (sum);
System.out.println (average);
}
答案 6 :(得分:0)
临时解决方法:unicode(urllib2.urlopen(url).read(), 'utf8')
- 如果返回的内容为UTF-8,则此操作。
urlopen().read()
返回字节,你必须将它们解码为unicode字符串。另外,从http://bugs.python.org/issue4733
答案 7 :(得分:0)
在你的android_suggest.py中,将那个怪异的单行返回语句分解为one_step_at_a_time个段。在某处记录repr(string_passed_to_json.loads)
,以便在发生异常后检查它。眼球结果。如果问题不明显,请编辑您的问题以显示代表。