Python UnicodeEncodeError:' ascii'编解码器不能对位置0中的字符进行编码:序数不在范围内(128)

时间:2018-01-19 18:22:51

标签: python string python-2.7 unicode encoding

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

  

UnicodeEncodeError:' ascii'编解码器无法对字符进行编码   0:序数不在范围内(128)   试图找到原因并重现木星的错误。只需输入。

str(u'\u2013')

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

3 个答案:

答案 0 :(得分:9)

试试这个:

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

答案 1 :(得分:4)

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

但是对于简单,这是一个优雅的解决方案,适用于我的用例:

from random import *

number = 4;

def myFunc(length):
    while length > 0:
        rndNumber = randint(0, 51)

    print('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'[rndNumber], end='')
        length -= 1

mod = str(myFunc(number))
print (mod)

或者只是使用:

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

safe_str(u'\u2013')

答案 2 :(得分:2)

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

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

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

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