【问题标题】:Python read and write 'ß' from filePython从文件中读取和写入'ß'
【发布时间】:2019-11-20 19:04:20
【问题描述】:

我有一个带有输入的 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:无效的继续字节

【问题讨论】:

  • 你试过没有.decode('utf8')吗?是的,你不能解码字符串,只能对它们进行编码
  • 没有.decode('utf8') 我得到类似Stra▀e的输出
  • lmao 的类型已经是str。为什么在上面使用str

标签: python unicode


【解决方案1】:

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

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

【讨论】:

  • 没问题。请将此标记为选择的答案;)
【解决方案2】:

如果在 Windows 上,文件可能以cp1252 编码。

无论编码如何,使用io.open 并指定编码。此代码适用于 Python 2 和 3。

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

还建议切换到 Python 3,其中 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)

【讨论】:

    【解决方案3】:

    你在正确的轨道上,关于decode,问题是只有no way 100% 猜测文件的编码。尝试不同的编码(例如latin-1)。

    【讨论】:

      【解决方案4】:

      它在 Python 提示符下以及从 python 脚本运行时都可以正常工作。

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

      以上内容适用于 Python 2.7。我可以知道你的python版本吗?

      【讨论】:

      • 我也使用 python 2.7。你也可以发布python脚本吗,也许我只是一个错误。
      • import random lmao1 = open('file.txt').read().splitlines() lmao =random.choice(lmao1) print str(lmao).decode('utf8')
      猜你喜欢
      • 2021-06-26
      • 2017-02-20
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多