我正在从一个包含有法语和英语字母的单词的文件中读取数据。我正试图构建一个所有可能的英语和法语字母的列表(存储为字符串)。我使用下面的代码进行此操作:
# encoding: utf-8
def trackLetter(letters, line):
for a in line:
found = False;
for b in letters:
if b==a:
found = True
if not found:
letters += a
cur_letters = []; # for storing possible letters
data = urllib2.urlopen('https://duolinguist.wordpress.com/2015/01/06/top-5000-words-in-french-wordlist/', 'utf-8')
for line in data:
trackLetter(cur_letters, line)
# works if I print here
print cur_letters
此代码打印以下内容:
['t'、'h'、'e'、'o'、'f'、'a'、'n'、'd'、'i'、'r'、's'、'b'、'y'、'w',
'U'、'M'、'L'、'V'、'C'、'P'、'G'、'K'、'X'、'J'、'Z'、'Q'、'XC3',
'\xa0'、'\xaa'、'\xb9'、'\xa9'、'\xa8'、'\xb4'、'\xae'、'-'、'\xe2',
'\x80'、'\x99'、'\xa2'、'\xa7'、'\xbb'、'\xaf']
显然,尽管我指定了UTF编码,但在某种形式的转换中,法语字母已经丢失了!奇怪的是,当我直接打印出这行(显示为注释)时,法语字符看起来非常完美!
我应该如何保存这些字符(
é, è, ê, etc.
),或者将它们转换回原始版本? 最佳答案
它们不会丢失,它们只是在打印列表时逃走的。
当您在python 2中打印一个列表时,它调用列表本身的__str__
方法,而不是在每个单独的项目上,并且列表的__str__
方法会避开您的非ASCII字符。更多解释请参见这个很好的答案:
How does str(list) work?
下面的代码片段简洁地演示了这个问题:
char_list = ['é', 'è', 'ê']
print(char_list)
# ['\xc3\xa9', '\xc3\xa8', '\xc3\xaa']
print(', '.join(char_list))
# é, è, ê