写入文件时出现错误的utf8字符(python)

2024-10-01 00:36:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在编码方面遇到了一个问题,这个问题看起来与这里的其他问题非常相似,但并不完全相同,我无法解决整个问题。在

我以为我已经掌握了编码的概念,但我有这些特殊的字符(æ,å,ö等),在打印时看起来不错,但无法写入文件。(例如,当我写入文件时,æ变为ÃН)

我的代码如下:

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")

我尝试了各种编码,用编解码器.打开(file,r,'utf-8'),但无效。我错过了什么?在

我在ubuntu上(从Windows切换过来,因为它的终端无法正确输出)


Tags: 文件intxt编码forarticleopenarticles
2条回答

当您在文本文件中看到类似于ÃН(或者更普遍地说是2个字符,其中第一个字符是Ã),很可能文件是用UTF8正确编写的,而编辑器(或屏幕)无法正确处理UTF8。在

让我们看看æ。它是unicode字符U+E6。当你用utf8编码它时,它给出两个字符b'\xc3\xa6',当它被解码为拉丁1时,它将输出'æ'。在

你能做什么来确认?使用优秀的vim编辑器,它了解多种编码和其他utf8,至少当您使用它的图形界面gvim时。在

还有一个一般性的建议:永远不要在python源文件中写入非ascii字符,除非您将# -*- coding: ... -*-行作为第一行(如果第一行是hashbang行,则是第二行)

如果您想在Windows下使用unicode和Python,那么一定要使用本机处理它的IDLE。在

TL/DR:如果您使用的是Linux,很可能您的系统本机配置为使用utf8编码,并且您可以正确地用utf8编写文本文件,但是您的文本编辑器无法正确显示utf8

您是否尝试过:

w.write( ' '.join(article).encode('utf8') )

别忘了关闭文件(最好使用with上下文管理器来操作文件)

相关问题 更多 >