Python 3中的Windows控制台的UnicodeEncodeError

时间:2015-07-28 19:52:59

标签: python windows python-3.x encoding

我已经仔细阅读了与这个问题相关的其他主题,但没有人直接回答这个问题。我希望也许你们都可以提供帮助。

我正在努力清理长期滥用和未清理的Wordpress主题。我们有大约10-12个未使用的CSS文件。就在我要删除它们之前,有人告诉我,某些文件可能已在网站的实际内容中引用。 Shudder 我正在使用Python在行中搜索文件名。如果找到名称,它将从它所在的文件中呈现该行,并完整地呈现该行。最后,它显示最终结果并关闭文件等。这是代码。 (抬头......我对Python不太熟悉。)

cssfile = open("css.txt", "r")
s = open("berea.sql", "r", encoding="utf-8")

totalfound = 0
lineinfile = 0

for filename in cssfile:
    for line in s:
        lineinfile = lineinfile+1
        for filename in line:
            print (lineinfile, line)
            totalfound = totalfound+1
    lineinfile=0
    if totalfound == 0:
        print ("No results were found for %s") % filename
    else:
        print ("We found %i of %s in the database") % (totalfound, filename)


cssfile.close()
searchfile.close()

老实说,最大的问题来自我收到的编码错误。

UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position
445: character maps to <undefined>

我已经看到添加不同的解码,编码等应该修复它,但似乎没有任何工作...我会感激任何和所有的帮助。我有大约349,000行要搜索,我一直在830停止。

2 个答案:

答案 0 :(得分:0)

https://wiki.python.org/moin/PrintFails详细说明了此错误。

  

&#34; UnicodeEncodeError:&#39; charmap&#39;编解码器不能对字符u&#39; \ u1234&#39;进行编码。在位置0:字符映射到未定义&#34;

     

这意味着python控制台应用程序无法将给定的字符写入控制台的编码。

     

更具体地说,python控制台应用程序创建了一个_io.TextIOWrapperd实例,其编码不能代表给定的字符。

...

  

默认情况下,Microsoft Windows中的控制台仅显示256个字符(cp437,&#34;代码页437&#34;,原始IBM-PC 1981扩展ASCII字符集。)

     

如果您尝试打印不可打印的字符,则会收到UnicodeEncodeError。

     

如上所述设置PYTHONIOENCODING环境变量可用于抑制错误消息。设置为&#34; utf-8&#34;不推荐使用,因为这会产生输出到控制台的不准确,乱码表示。为了获得最佳效果,请使用您的控制台正确的默认代码页和除#34; strict&#34;以外的合适的错误处理程序。

尝试忽略其中一些建议并在Windows CMD中执行以下操作:

set PYTHONIOENCODING=utf-8
chcp 65001

还将控制台字体设置为:Lucinda Console

这应该将控制台设置为糟糕的UTF-8仿真并强制Python编码为UTF-8。

您可能会发现将结果写入UTF-8编码文件而不是写入控制台更简单。

使用https://github.com/Drekin/win-unicode-console

答案 1 :(得分:0)

在Windows中,只需从Python IDLE GUI运行它,而不是从控制台窗口运行它。