【问题标题】:How to add non ASCII characters in a python list?如何在 python 列表中添加非 ASCII 字符?
【发布时间】:2019-08-17 07:11:31
【问题描述】:

我是python的新手。我想要一个包含非 ASCII 字符的字符串列表。

This answer 建议了一种方法来做到这一点,但是当我尝试代码时,我得到了一些奇怪的结果。请参阅以下 MWE -

#-*- coding: utf-8 -*-
mylist = ["अ,ब,क"]
print mylist

输出是['\xe0\xa4\x85,\xe0\xa4\xac,\xe0\xa4\x95']

当我在列表中使用 ASCII 字符时,假设["a,b,c"] 输出也是['a,b,c']。我希望我的代码输出为 ["अ,ब,क"]

如何做到这一点?

PS - 我使用的是 python 2.7.16

【问题讨论】:

  • 如果您只是学习基础知识,您可能应该忽略 Python 2,而将时间花在当前推荐和支持的语言版本上,即 Python 3。

标签: python-2.7 utf-8


【解决方案1】:

您想将这些标记为 Unicode 字符串。

mylist = [u"अ,ब,क"]

根据您要完成的任务,如果数据只是单个字符串,则可能不需要在列表中。或者您可能想要一个字符串列表?

mylist = [u"अ", u"ब", u"क"]

Python 3 为使用 Unicode 带来了很多缓解(并且不需要在 Unicode 字符串前面加上u sigil,因为所有字符串都是 Unicode),并且绝对应该是你的学习目标,除非你有特别的任务在今年年底正式放弃 Python 2 后维护遗留软件。

无论您的 Python 版本如何,在您的系统上显示 Unicode 可能仍然存在问题,尤其是在旧系统和 Windows 上。

如果您不熟悉编码问题,您可能需要阅读 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 以及 Python 特定的 Pragmatic Unicode

【讨论】:

    【解决方案2】:

    用途:

    #-*- coding: utf-8 -*-
    mylist = ["अ,ब,क"]
    print [unicode(i) for i in mylist]
    

    或使用:

    #-*- coding: utf-8 -*-
    mylist = ["अ,ब,क"]
    print map(unicode, mylist)
    

    【讨论】:

    • 我收到了这个错误。 Traceback (most recent call last): File "Test.py", line 3, in <module> print map(unicode, mylist) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
    • 第一个代码的错误是Traceback (most recent call last): File "Test.py", line 3, in <module> print [unicode(i) for i in mylist] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多