我想处理一个句子,比如: “这件礼物花了将近100英镑”
这个句子在一个文本文件中。我用python阅读,当我打印它时,我得到:
print "text",text
text The gift costs nearly £100.
我试图用代码替换它(当我完成处理后,我将使用另一个函数unmapstrangechars来获取原始数据):
^{pr2}$但我确实有一个错误,说‘’不是acii字符。我怎样才能修好它?在
这将是有益的,至少知道我如何取代非acii字符与任何特定于这个字符,以便我可以恢复它的字母。 例如: 原稿:礼物花费将近100英镑。 复制品1:这件礼物价值11英镑1100英镑。 产出:这件礼物价值近100美元。在
实际输出是:
print text
整个代码(在txt文件中写着“礼物价值将近100英镑。”):
if 1==1:
import os
script_dir = os.path.dirname(os.path.realpath(__file__))
rel_path = "results/article.txt"
abs_file_path = os.path.join(script_dir, rel_path)
thefile = open(abs_file_path)
text = thefile.read()
print "text",text
def mapstrangechars(text):
#text = text.replace("fdfdsfds","1pound1 ")
return text
def unmapstrangechars(text):
#text = text.replace("1pound1 ","fdfdsfds")
return text
text = mapstrangechars(text)
#process the text
text = unmapstrangechars(text)
print "text",text #this is output
这是因为文本文件的编码是“utf-8”,但您的终端/IDE可能是Windows-1252编码。在
在UTF-8中,磅符号被编码为两个字节:
0xc2 0xa3
如果你在一个十六进制编辑器中打开你的文件,这就是你看到的。在当您打印它时,您的终端/IDE将
0xc2 0xa3
解释为windows-1252
。与其他8位代码页一样,windows-1252
期望每个字节映射到一个字符。因此,当0xc2 0xa3
被解释为windows-1252
,并且每个字节被映射到一个字符时,会发生以下情况:0xc2
显示为Â
0xa3
显示为£
解决方案是将文本文件解码为一种称为“Unicode string”的特殊Python字符串类型。一旦有了pythonunicode字符串,Python就可以为您的终端类型重新编码。一、 e,Python将解码UTF-8,然后编码为
windows-1252
。在为此,请使用
io
模块open()
方法并传入encoding
属性:当你从^{得到
read()
,你将得到一个<type 'unicode'>
。它的功能和普通的字符串一样。当您将它传递给print
时,Python将自动对其进行编码,以便在您的终端上显示。在您不再需要}
mapstrangechars()
和{注意:这是python2.x的特有特性,其中
open()
默认以二进制模式打开。Python3在默认情况下以文本模式打开,如果没有给出正确的编码,它将使用区域设置/语言设置来确定正确的编码。在相关问题 更多 >
编程相关推荐