关于字符串:Python UnicodeEncodeError:’ascii’编解码器无法对位置0中的字符进行编码:序号不在范围内(128)

Python UnicodeEncodeError: 'ascii' codec can't encode character in position 0: ordinal not in range(128)

本问题已经有最佳答案,请猛点这里访问。

在python 2.7中,当尝试强制转换类型以确保它与输出模式匹配时,请参见以下错误。

UnicodeEncodeError: 'ascii' codec can't encode character in position
0: ordinal not in range(128)
Tried to find why and reproduced the error in Jupiter. By simply typing in.

1
str(u'\u2013')

如何将类型强制转换为可以处理此类错误的字符串?谢谢!


试试这个:

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

我会回答我自己的问题。找到一个重复的问题。stackoverflow.com/questions/9942594(堆栈溢出)/

但为了简单起见,这里有一个优雅的解决方案可以很好地与我的用例配合使用:

1
2
3
4
5
6
7
def safe_str(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    return""

safe_str(u'\u2013')

或者简单地使用:

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


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

1
2
# -*- coding: utf-8 -*-
# Your code goes below this line

它应该能解决你的问题。

对于python 3.x,有默认编码,因此不会有编码问题。