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

将ISO-8859-1字符粘贴到Python IDLE-IDLE中会更改它们,python,character-encoding,python-3.6,python-idle,Python,Character Encoding,Python 3.6,Python Idle,我试图替换/删除文本文档中的一些行。文档采用ISO-8859-1字符编码 当我试图将这一行复制到Python脚本中替换它时,它将不匹配。如果我缩短行并删除,直到第一个双引号“它将取代它罚款 i、 e 这将不匹配。如果我输入: desc = [x.replace('Random text :', '') for x in desc] 它匹配得很好。我已经检查过它也不是“^”符号。 显然,Python IDLE没有使用与我的文本文件相同的字符集,并且在我将其粘贴到脚本中时正在更改符号。那么,如果我

我试图替换/删除文本文档中的一些行。文档采用ISO-8859-1字符编码

当我试图将这一行复制到Python脚本中替换它时,它将不匹配。如果我缩短行并删除,直到第一个双引号“它将取代它罚款

i、 e

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

desc = [x.replace('Random text :', '') for x in desc]
它匹配得很好。我已经检查过它也不是“^”符号。
显然,Python IDLE没有使用与我的文本文件相同的字符集,并且在我将其粘贴到脚本中时正在更改符号。那么,如果我的脚本不能处理相同的字符,如何让它查找这一行呢?

不幸的是,尽管有包不能确定纯文本文档的编码,但没有确定的方法hat可以通过分析文档的内容进行很好的猜测。一个流行的第三方编码检测模块是。或者,您可以手动使用一些流行编码的试错法,看看什么是有效的

一旦确定了正确的编码,在Python 3中,替换操作本身就很简单。核心思想是将编码传递给
open
函数,这样您就可以将Unicode字符串对象写入文件,或从文件中读取Unicode字符串对象。下面是一个简短的演示。如果您对r终端设置为UTF-8。我已经在Python3.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

您使用的是哪种Python版本?在与编码问题相关的问题中,必须提到这一点,因为Python 2和Python 3在处理Unicode的方式上存在重大差异。我认为您的文档没有使用ISO-8859-1,因为该编码没有
。但是,如上的维基百科文章所述,使用Windows代码页1252编码的文本被错误标记为ISO-8859-1是很常见的。我使用的是Python 3.6.0。我如何知道文档使用的是什么实际编码?一旦我确定了字符是什么,有没有办法让字符粘贴到我的脚本中?不幸的是,有虽然有些软件包可以通过分析文档的内容来做出很好的猜测,但是没有确定的方法来确定纯文本文档的编码。请使用那些“智能”引号
当你将它们粘贴到脚本中时,它们会变成
吗?如果不是,它们会变成什么?我不能通过粘贴在这里来复制它。当我将它们复制到脚本中时,它们会变成类似于“但角度指向它们周围的单词”
This is some Random text “^char”: for testing

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