Python UnicodeEncodeError: 'ascii'编解码器无法对第0个位置的字符进行编码:该位置上的序号不在128范围内。

8
在Python 2.7中,当尝试将类型转换以确保其与输出模式匹配时,会出现以下错误:
UnicodeEncodeError:'ascii'编解码器无法在位置0处编码字符:序数不在范围内(128) 尝试查找原因并在Jupiter中重现了该错误。只需简单地输入即可。
str(u'\u2013')

什么是将类型强制转换为字符串的方法,可以处理这种类型的错误?谢谢!

一个附带的问题,字符串中的u'\u'`模式表示什么意思? - Bin
1
它定义了一个Unicode字符串,而Python 2的str类型无法容纳。在Python 3中,这要容易得多;你绝对不应该再使用Python 2来学习Python! - tripleee
3个回答

22

试一下这个:

u'\u2013'.encode('utf-8')

14

我会回答自己的问题。发现了一个重复的问题。stackoverflow.com/questions/9942594/

但是为了简单起见,这里有一个优雅的解决方案,适用于我的使用情况:

def safe_str(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    return ""

safe_str(u'\u2013')

或者直接使用:

u'\u2013'.encode('ascii', 'ignore')

print(whatever.encode('ascii', 'ignore')) - imbr

2

对于版本2.7.x,默认情况下未设置编码。 请在程序的第一行使用以下代码。

#!/usr/bin/env python # -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# Your code goes below this line

它应该可以解决你的问题。

对于Python 3.x来说,已经有默认编码了,所以不会出现编码问题。


不行,这个不起作用。 - Ken Ingram
1
这在我的Python3程序中不起作用。 - purval_patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接