Python pickle不';t打印诸如'âéčć';

Python pickle不';t打印诸如'âéčć';,python,utf-8,pickle,Python,Utf 8,Pickle,我不太熟悉编程术语,所以请耐心听我说 我正在制作一个语言程序,它必须能够保存和读取包含utf-8字符的文件文本 我在用泡菜 WORDS = [['eat','manger','v'],['drink','boire','v'], ["cake",'le gateau','n'],['coffee','le café','n']] wordDatabase = open('wordsForProgram.txt','wb') pickle.dump(WORDS,wordDatabase) wor

我不太熟悉编程术语,所以请耐心听我说

我正在制作一个语言程序,它必须能够保存和读取包含utf-8字符的文件文本

我在用泡菜

WORDS = [['eat','manger','v'],['drink','boire','v'],
["cake",'le gateau','n'],['coffee','le café','n']]

wordDatabase = open('wordsForProgram.txt','wb')
pickle.dump(WORDS,wordDatabase)
wordDatabase.close()

inFile = open('wordsForProgram.txt','rb')
newList = pickle.load(inFile)
print(newList)
它打印出:

[['eat', 'manger', 'v'],
['drink', 'boire', 'v'],
['cake', 'le gateau', 'n'],
['coffee', 'le café', 'n']]
脚本中的列表也将“le café”更改为“le cafĂĂ”)。当我把它改回来时,它会再次工作,直到我关闭并重新打开脚本

谢谢

您的文件顶部是否有
#-*-编码:utf-8-*-

# -*- coding: utf-8 -*-
import pickle
WORDS = [['eat','manger','v'],['drink','boire','v'],
["cake",'le gateau','n'],['coffee','le café','n']]

wordDatabase = open('wordsForProgram.txt','wb')
pickle.dump(WORDS,wordDatabase)
wordDatabase.close()

inFile = open('wordsForProgram.txt','rb')
newList = pickle.load(inFile)

for i in newList:
    for j in i:
        print j
Word和newList的输出相同:

eat
manger
v
drink
boire
v
cake
le gateau
n
coffee
le café
n
您还可以尝试使用编解码器模块:

# -*- coding: utf-8 -*-
import pickle
import codecs
WORDS = [['eat','manger','v'],['drink','boire','v'],
["cake",'le gateau','n'],['coffee','le café','n']]

wordDatabase = codecs.open('wordsForProgram.txt', 'w', 'utf-8')
pickle.dump(WORDS,wordDatabase)
wordDatabase.close()

inFile = codecs.open('wordsForProgram.txt','rb')
newList = pickle.load(inFile)

for i in newList:
    for j in i:
        print j

正如我从示例中看到的,注意单词变量。您正在尝试打印新列表吗?在转储到文件之前打印
单词时会发生什么情况?您有UTF-8编码的数据,但您的终端可能没有配置为UTF-8显示。@badc0re是的,谢谢您指出这一点!嗯,现在好像有用了。即使我只是打印内嵌,也不会再将其更改为cafĂ©了。是新列表中的-for i做了什么,还是仅仅是“#——编码:utf-8——”。如果是这样的话,注释的代码不应该是不可读的吗?哦,谢谢!你所做的一切似乎都奏效了这是一个编码声明,目前似乎没有必要使用编解码器。如果有什么东西被破坏了,我也会试试。正如@Martijn Pieters所说的,终端可能不支持这种编码。