我遇到的编码问题看起来与其他问题非常相似,但并不完全相同,我无法想象这一切。
我以为我已经掌握了编码的概念,但我有这些特殊字符(æ,ø,å,ö等)在打印时看起来很好,但不能写入文件。 (例如,当我写入文件时,æ变为Š)
我的代码如下:
def sortWords(subject, articles, stopWordsFile):
stopWords = []
f = open(stopWordsFile)
for lines in f:
stopWords.append(lines.split(None, 1)[0].lower())
for x in range(0,len(articles)):
f = open(articles[x], 'r')
article = f.read().lower()
article = re.sub("[^a-zA-Z\æøåÆØÅöÖüÜ\ ]+", " ", article)
article = [word for word in article.split() if word not in stopWords]
print ' '.join(article)
w = codecs.open(subject+str(x)+'.txt', 'w+')
w.write(' '.join(article))
sortWords("hpv", ["vaccine_texts/hpv1.txt"], "stopwords.txt")
我尝试过各种编码,用codecs.open(文件,r,'utf-8')打开文件,但无济于事。我在这里缺少什么?
我在ubuntu上(从Windows切换,因为它的终端无法正确输出)
答案 0 :(得分:2)
当您在文本文件中看到类似Ã(或更常见的2个字符,其中第一个是Ã)时,可能是文件是以UTF8正确编写的,并且编辑器(或屏幕)不会处理正确的UTF8。
让我们看看æ
。它是unicode字符U + E6。当你在utf8中对它进行编码时,它会给出两个字符b'\xc3\xa6'
,当解码为latin1时,它会打印出来'æ'
。
你能做些什么来确认?使用知道多个编码的优秀vim编辑器以及utf8,至少在使用其图形界面gvim
时。
还有另一个一般建议:从不在python源文件中写入非ascii字符,除非你将# -*- coding: ... -*-
行作为第一行(或者如果第一行是第二行,则为第二行){ {1}})
如果您想在Windows下使用带有Python的unicode,请使用本机处理它的IDLE。
TL / DR:如果您使用的是Linux,很可能您的系统本身配置为使用utf8编码,并且您正确地在utf8中编写文本文件,但您的文本编辑器无法正确显示utf8
答案 1 :(得分:0)
你试过了吗?
w.write( ' '.join(article).encode('utf8') )
并且不要忘记关闭文件(最好使用with
上下文管理器来操作文件)