python - 为什么python以乱码字符写入文件

标签 python character-encoding

我尝试了 Problem 10在 euler 项目中并通过了,但我决定,如果我将所有低于 200 万的质数写入一个文本 (.txt) 文件会怎样 所以我继续对主要函数进行了一些小的调整解决了这个问题所以不只是将它添加到变量(tot)我将生成器生成的质数写入文本文件并且它首先工作但是忘记在每个质数之后添加空格,所以输出有点像乱码

357111317192329313741434753

所以我将 txt.write(str(next_prime)) 修改为 txt.write(str(next_prime) + ' ')

稍作修改后,输出完全是乱码

″‵‷ㄱㄠ″㜱ㄠ‹㌲㈠‹ㄳ㌠‷ㄴ㐠″

这是我的函数的完整代码:

def solve_number_10():
    total = 2
    txt = open("output.txt","w")
    for next_prime in get_primes(3):
        if next_prime < 2000000:
            txt.write(str(next_prime) + ' ')
            #total += next_prime
        else:
            print "Data written to txt file"
            #print total
            txt.close()
            return

为什么会这样,我怎样才能使输出像

3 5 7 11 13 17 19

最佳答案

这是 Microsoft 的记事本程序中的错误,而不是您的代码中的错误。

>>> a = '‵‷ㄱㄠ″㜱ㄠ‹㌲㈠‹ㄳ㌠‷ㄴ㐠'
>>> a.decode('UTF-8').encode('UTF-16LE')
'5 7 11 13 17 19 23 29 31 37 41 4'

哦,嘿,看,它们是质数(我假设 4 只是截断的 43)。

您可以通过以下方式解决记事本中的错误

  1. 使用没有错误的其他文件查看器。

  2. 在文件开头写一个 ZWNBSP 一次,以 UTF-8 编码:

    txt.write(u'\uFEFF'.encode('UTF-8'))
    

    这被错误地称为 BOM。它将是 UTF-16 中的 BOM,但 UTF-8 在技术上不应该有 BOM。大多数程序会忽略它,而在其他程序中它是无害的。

关于python - 为什么python以乱码字符写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17347647/

相关文章:

python - 在 main.py 中重用类的方法

python - 如何使用seaborn和ipywidgets制作交互式条形图

python - 如何使用python从postgresql中选择像100这样没有[(100),]的数据?

python - for循环仅使用字典中的第一个键

python - 使用 lxml.etree 在 Python 中解析 XML

character-encoding - 英镑符号在商店中显示为未知字符

c++ - 如何在 C++ 中处理 ifstream、cout 等的多个语言环境

python - 如何用变音符号替换\xc3 等?

unicode - 这个八位字节流如何被解释为希伯来语 UTF-8 编码?

javascript - £ 在输入 [type=text] 上