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

时间:2017-10-16 03:28:02

标签: python character-encoding python-3.6 python-idle

我正在尝试替换/删除文本文档中的一些行。该文档采用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没有使用与我的文本文件相同的字符集,并且在将其粘贴到脚本中时正在更改符号。那么,如果它不处理相同的字符,如何让我的脚本查找该行?

1 个答案:

答案 0 :(得分:1)

不幸的是,确定纯文本文档的编码没有确定的方法,尽管有些软件包可以通过分析文档的内容做出非常好的猜测。用于编码检测的一种流行的第三方模块是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