首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows中与json一起出现的UnicodeDecodeError,而不是Mac

在Windows中与json一起出现的UnicodeDecodeError,而不是Mac
EN

Stack Overflow用户
提问于 2010-05-30 00:35:43
回答 1查看 1.2K关注 0票数 2

在windows上,我有以下问题:

代码语言:javascript
复制
>>> string = "Don´t Forget To Breathe"
>>> import json,os,codecs
>>> f = codecs.open("C:\\temp.txt","w","UTF-8")
>>> json.dump(string,f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\json\__init__.py", line 180, in dump
    for chunk in iterable:
  File "C:\Python26\lib\json\encoder.py", line 294, in _iterencode
    yield encoder(o)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 3-5: invalid data

(注意字符串中的非ascii撇号。)

然而,我的朋友,在他的mac上(也使用python2.6),可以轻松地运行:

代码语言:javascript
复制
> string = "Don´t Forget To Breathe"
> import json,os,codecs
> f = codecs.open("/tmp/temp.txt","w","UTF-8")
> json.dump(string,f)
> f.close(); open('/tmp/temp.txt').read()
'"Don\\u00b4t Forget To Breathe"'

为什么会这样呢?我也尝试使用UTF-16和UTF-32与json和编解码器,但没有任何效果。

EN

回答 1

Stack Overflow用户

发布于 2010-05-30 01:02:38

repr(string)在每台机器上显示什么?在我的Mac上,撇号显示为\xc2\xb4 (utf8编码,2字节),因此utf8编解码器当然可以处理它;在您的utf8上,它显然没有这样做,因为它谈论三个字节是一个问题,所以在Windows上您必须为控制台设置一些其他的非utf8 8编码集。

您的一般问题是,在PythonPre-3中,您不应该输入非ascii内容的字节字符串("....",而不是u"....") (除非是转义字符串):这可能(取决于会话的设置方式)直接失败或产生字节,根据某些作为默认字节的编解码集,这些字节不是您期望的确切字节(因为您不知道正在使用的确切的默认编解码器)。使用显式Unicode文字

代码语言:javascript
复制
string = u"Don´t Forget To Breathe"

而且你应该没事(如果你有任何问题,它会出现在这个任务的时候,届时我们可能会进入“如何设置我的交互会话的默认编码”的问题,如果你需要的话)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2937095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档