【问题标题】:Python UnicodeEncodeError: 'ascii' codec can't encode character in position 0: ordinal not in range(128) [duplicate]Python UnicodeEncodeError:'ascii'编解码器无法在位置0编码字符:序数不在范围内(128)[重复]
【发布时间】:2018-06-29 01:29:56
【问题描述】:

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

UnicodeEncodeError: 'ascii' 编解码器无法在位置编码字符 0:序数不在范围内(128) 试图找出原因并在 Jupiter 中重现错误。只需输入即可。

str(u'\u2013')

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

【问题讨论】:

  • 一个小问题,字符串的u'\u'`模式是什么意思?
  • 它定义了一个 Unicode 字符串,Python 2 str 类型无法容纳该字符串。这在 Python 3 中更易于管理;你绝对不应该再使用 Python 2 来学习 Python!

标签: python string python-2.7 unicode encoding


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

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

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

    应该可以解决你的问题。

    python 3.x 有默认编码,所以不会有编码问题。

    【讨论】:

    • 没有。这不起作用。
    【解决方案3】:

    我会回答我自己的问题。发现一个重复的问题。 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'))
    猜你喜欢
    • 2014-01-22
    • 2015-04-17
    • 2011-07-05
    • 1970-01-01
    • 2020-07-26
    • 2017-12-18
    • 1970-01-01
    • 2013-11-18
    • 2016-10-06
    相关资源
    最近更新 更多