【问题标题】:Why am I getting "UnicodeEncodeError: 'charmap' codec can't encode character" error message为什么我收到“UnicodeEncodeError:'charmap'编解码器无法编码字符”错误消息
【发布时间】:2015-03-09 11:47:13
【问题描述】:

我在Windows CMD窗口中运行时遇到了我编写的Python脚本的问题,并将问题的本质归结为以下SSCCE

Python 脚本 (x.py)

import sys

in_file = open (sys.argv[1], 'rt')

for line in in_file:
    line = line.rstrip ('\n')
    print ('line="%s"' % (line))

in_file.close ()

输入数据文件(x.txt)

Line 1
Line 2 “text”
Line 3

命令行调用

python x.py x.txt

错误输出

C:\junk>python x.py x.txt
line="Line 1"
Traceback (most recent call last):
  File "x.py", line 7, in <module>
    print ('line="%s"' % (line))
  File "C:\Program Files (x86)\Python34\lib\encodings\cp862.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u201c' in position 13: character maps to <undefined>

C:\junk>

第二条输入记录(“第 2 行”)似乎失败了。我做错了什么?

【问题讨论】:

    标签: python character-encoding cmd codepages


    【解决方案1】:

    答案原来是 Windows 代码页问题。

    第二个输入行使用 ANSI 印刷字符 0x93 (147) 和 0x94 (148),分别对应于左引号和右引号。尽管输入文件是 ASCII 文件(即字符

    Python 读得很好,但在尝试将其打印到控制台窗口时抛出了异常。如错误输出所示,错误消息来自 lib\encodings\cp862.py,它对应于 MS_DOS 的希伯来语代码页 code page 862。 Windows 尝试将 ANSI 字符 0x93 (147) 转换为 Python 的默认编码不支持的 Unicode U+201C(“左双引号”)。

    执行CHCP (Change Codepage) command 给出:

    C:\junk>chcp
    Active code page: 862
    
    C:\junk>
    

    将 CMD 窗口的代码页更改为 CP 1252(“Latin-1”)即可解决问题:

    C:\junk>chcp 1252
    Active code page: 1252
    
    C:\junk>python x.py x.txt
    line="Line 1"
    line="Line 2 “text”"
    line="Line 3"
    
    C:\junk>
    

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多