Python读写'ß';从文件

Python读写'ß';从文件,python,unicode,Python,Unicode,我有一个带有输入的file.txt文件 Straße Straße 1 Straße 2 我想从文件中读取此文本并打印它。我试过这个,但不起作用 lmao1 = open('file.txt').read().splitlines() lmao =random.choice(lmao1) print str(lmao).decode('utf8') 但我得到了一个错误: UnicodeDecodeError:“utf8”编解码器无法解码位置5中的字节0xdf:无效的连续字节 它在Python

我有一个带有输入的file.txt文件

Straße
Straße 1
Straße 2
我想从文件中读取此文本并打印它。我试过这个,但不起作用

lmao1 = open('file.txt').read().splitlines()
lmao =random.choice(lmao1)
print str(lmao).decode('utf8')
但我得到了一个错误:

UnicodeDecodeError:“utf8”编解码器无法解码位置5中的字节0xdf:无效的连续字节


它在Python提示符下运行良好,同时也可以从Python脚本运行

>>> import random
>>> lmao =random.choice(lmao1)
>>> lmao =random.choice(lmao1)
>>> print str(lmao).decode('utf8')
Straße 2

上述方法在Python2.7上有效。我可以知道你的python版本吗

明白了。如果这不起作用,请尝试其他常用编码,直到找到正确的编码。utf-8编码不正确

print str(lmao).decode('latin-1')

关于
解码
,您的思路是正确的,问题只是要100%地猜测文件的编码。请尝试不同的编码(例如
latin-1
)。

如果在Windows上,文件可能是用
cp1252
编码的

无论编码是什么,请使用
io。打开
并指定编码。这段代码将在Python2和Python3中工作

io.open
将返回Unicode字符串。在程序的I/O边界处立即与Unicode进行转换是一种很好的做法。在这种情况下,这意味着首先将文件读取为Unicode,然后离开
print
,以确定终端的适当编码

还建议切换到Python3,其中Unicode处理得到了极大改进

from __future__ import print_function
import io
import random
with io.open('file.txt',encoding='cp1252') as f:
    lines = f.read().splitlines()
line = random.choice(lines)
print(line)

您是否尝试过不使用
。解码('utf8')
?是的,你不能解码字符串,只能在没有
的情况下对它们进行编码。decode('utf8')
我得到一个类似
Stra的输出▀e
lmao的类型已经是
str
。为什么要在上面使用
str
?我也使用python 2.7。你也可以发布python脚本,也许我只是有个错误。
import random lmao1=open('file.txt')。read().splitlines()lmao=random.choice(lmao1)print str(lmao)。decode('utf8')
没问题。请将此标记为所选答案;)