【问题标题】:Handle French characters in list of strings处理字符串列表中的法语字符
【发布时间】:2018-10-26 11:11:28
【问题描述】:

我正在尝试从使用Python 2.7 以法语编写的CSV 文件中提取数据。我可以正确读取单个单元格(字符以打印时应有的方式显示)。但是,当我打印行列表(文件的全部内容)时,输出会被打乱。

例子:

# -*- coding: utf-8 -*-
from __future__ import print_function#, unicode_literals

l = ["à ä â",     #Some french characters
     "é è ë ê",
     "ï î",
     "ù ü û",
     "ö ô",
     "ç",
     "°"]

for i, item in enumerate(l):
    print(l[i])

print(l)

分别打印行(for 循环)输出:

à ä â
é è ë ê
ï î
ù ü û
ö ô
ç
°

在打印整个列表时 (print(l)) 输出:

['\xc3\xa0 \xc3\xa4 \xc3\xa2', '\xc3\xa9 \xc3\xa8 \xc3\xab \xc3\xaa', '\xc3\xaf \xc3\xae', '\xc3\xb9 \xc3\xbc \xc3\xbb', '\xc3\xb6 \xc3\xb4', '\xc3\xa7', '\xc2\xb0']

这真的让我很困惑。如果我错过了已经回答该问题的帖子,我深表歉意。

到目前为止我尝试了什么:

l= [unicode(i, 'utf-8') for i in l]

也输出:

[u'\xe0 \xe4 \xe2', u'\xe9 \xe8 \xeb \xea', u'\xef \xee', u'\xf9 \xfc \xfb', u'\xf6 \xf4', u'\xe7', u'\xb0']

编辑:

另一个尝试是:

l=repr(l).decode('unicode-escape').encode('utf8')
print(l)

输出期望的结果:

[u'à ä â', u'é è ë ê', u'ï î', u'ù ü û', u'ö ô', u'ç', u'°']

然而,

print(l[0])

输出:

[

所以列表现在是一个字符串。

提前感谢您的帮助和建议。

【问题讨论】:

  • 是时候切换到 Python 3 了 :) 我不明白为什么当列表中有字符而不是单独打印它们时,表示形式会有所不同。 IIRC 这与列表中的__repr__ 有关,但我只是在猜测。
  • 在 python 3 上运行没有任何问题...
  • 尝试将其编码为 un​​icode,然后将其转换为原始字符串。
  • 我知道它适用于 Python 3,但我坚持使用 Python 2.7
  • 如果您需要使用 python 2.7,可能更容易始终遍历列表以获得所需的结果...创建您自己的 my_print_list 函数,该函数循环遍历列表项并打印它们..猜猜这是最快的走动

标签: python python-2.7 unicode encoding


【解决方案1】:

你已经发现了 Python 2 的这个特性:

Printing Unicode Char inside a List

这就是 Python 2 中列表的打印方式。您的数据或您正在做的事情没有任何问题。

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 2017-06-06
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2011-09-06
    • 2012-11-20
    相关资源
    最近更新 更多