将 ISO-8859-1 字符粘贴到 Python IDLE - IDLE 更改它们

Pasting ISO-8859-1 characters into Python IDLE - IDLE changes them

我正在尝试 replace/remove 的文本文档中有一些行。文档采用 ISO-8859-1 字符编码。

当我尝试将此行复制到我的 Python 脚本中以替换它时,它不匹配。如果我缩短行并删除直到第一个双引号 " 它会很好地替换它。

desc = [x.replace('Random text “^char”:', '') for x in desc]

这将不匹配。如果我输入:

desc = [x.replace('Random text :', '') for x in desc]

匹配得很好。我已经检查过它也不是 ^ 符号。 显然 Python IDLE 没有使用与我的文本文件相同的字符集,并且在我将其粘贴到脚本中时正在更改符号。那么,如果我的脚本不处理相同的字符,我该如何让我的脚本查找这一行呢?

不幸的是,没有确定纯文本文档编码的万无一失的方法,尽管有些软件包可以通过分析文档的内容做出很好的猜测。一种流行的用于编码检测的第 3 方模块是 chardet。或者,您可以手动对一些流行的编码进行反复试验,看看效果如何。

一旦你确定了正确的编码,替换操作本身就很简单 Python 3. 核心思想是将编码传递给 open 函数,这样你就可以写Unicode 字符串对象到文件,或从文件中读取 Unicode 字符串对象。这是一个简短的演示。如果您的终端编码设置为 UTF-8,这将正常工作。我已经在 Python 3.6.0 上测试过它,在 Bash shell 和 idle3.6.

fname = 'test.txt'
encoding = 'cp1252'

data = 'This is some Random text “^char”: for testing\n'
print(data)

# Save the text to file
with open(fname, 'w', encoding=encoding) as f:
    f.write(data)

# Read it back in
with open(fname, 'r', encoding=encoding) as f:
    text = f.read()

print(text, text == data)

# Perform the replacement
target = 'Random text “^char”:'

out = text.replace(target, 'XXX')
print(out)

输出

This is some Random text “^char”: for testing

This is some Random text “^char”: for testing
 True
This is some XXX for testing