如何正确设置Python 3(和cmd.exe)编码?

时间:2015-08-20 19:12:01

标签: python encoding

我试图用Python打印笑脸:☺

它在交互式shell(在cmd.exe中)

中没有任何问题
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("☺")
☺

但如果我从文件中尝试相同的操作,我会收到此错误:

Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print("\u263a")
  File "C:\dev\lang\Python34\lib\encodings\cp850.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u263a' in position
0: character maps to <undefined>

Python-File是UTF-8编码的。

更新

即使我的问题还没有真正的答案,也值得阅读问题下的评论。我还使用cmd.exe的默认光栅字体(在Windows 10上测试)创建了所有可打印字符的列表。要打印char,只需使用chr()功能。例如chr(14)为您提供

0       [space]
1       ☺
2       ☻
3       ♥
4       ♦
5       ♣
6       ♠
7       [nothing]
8       [backspace, removes char before]
9       [tabulator]
10      [newline]
11      ♂
12      ♀
13      [takes part after chr(13) and replaces begin of string with it]
14      ♫
15      ☼
16      ►
17      ◄
18      ↕
19      ‼
20      ¶
21      §
22      ▬
23      ↨
24      ↑
25      ↓
26      →
27      ←
28      ∟
29      ↔
30      ▲
31      ▼
32      [space]
33      !
34      "
35      #
36      $
37      %
38      &
39      '
40      (
41      )
42      *
43      +
44      ,
45      -
46      .
47      /
48      0
49      1
50      2
51      3
52      4
53      5
54      6
55      7
56      8
57      9
58      :
59      ;
60      <
61      =
62      >
63      ?
64      @
65      A
66      B
67      C
68      D
69      E
70      F
71      G
72      H
73      I
74      J
75      K
76      L
77      M
78      N
79      O
80      P
81      Q
82      R
83      S
84      T
85      U
86      V
87      W
88      X
89      Y
90      Z
91      [
92      \
93      ]
94      ^
95      _
96      `
97      a
98      b
99      c
100     d
101     e
102     f
103     g
104     h
105     i
106     j
107     k
108     l
109     m
110     n
111     o
112     p
113     q
114     r
115     s
116     t
117     u
118     v
119     w
120     x
121     y
122     z
123     {
124     |
125     }
126     ~
127     ⌂
160     [space]
161     ¡
162     ¢
163     £
164     ¤
165     ¥
166     ¦
167     §
168     ¨
169     ©
170     ª
171     «
172     ¬
173     ­[shorter -, can't be displayed outside of console]
174     ®
175     ¯
176     °
177     ±
178     ²
179     ³
180     ´
181     µ
182     ¶
183     ·
184     ¸
185     ¹
186     º
187     »
188     ¼
189     ½
190     ¾
191     ¿
192     À
193     Á
194     Â
195     Ã
196     Ä
197     Å
198     Æ
199     Ç
200     È
201     É
202     Ê
203     Ë
204     Ì
205     Í
206     Î
207     Ï
208     Ð
209     Ñ
210     Ò
211     Ó
212     Ô
213     Õ
214     Ö
215     ×
216     Ø
217     Ù
218     Ú
219     Û
220     Ü
221     Ý
222     Þ
223     ß
224     à
225     á
226     â
227     ã
228     ä
229     å
230     æ
231     ç
232     è
233     é
234     ê
235     ë
236     ì
237     í
238     î
239     ï
240     ð
241     ñ
242     ò
243     ó
244     ô
245     õ
246     ö
247     ÷
248     ø
249     ù
250     ú
251     û
252     ü
253     ý
254     þ
255     ÿ
305     ı
402     ƒ
8215    ‗
9472    ─
9474    │
9484    ┌
9488    ┐
9492    └
9496    ┘
9500    ├
9508    ┤
9516    ┬
9524    ┴
9532    ┼
9552    ═
9553    ║
9556    ╔
9559    ╗
9562    ╚
9565    ╝
9568    ╠
9571    ╣
9574    ╦
9577    ╩
9580    ╬
9600    ▀
9604    ▄
9608    █
9617    ░
9618    ▒
9619    ▓
9632    ■

1 个答案:

答案 0 :(得分:1)

当您重定向到文件时,Python不知道要使用哪种编码。重定向到文件是一个shell操作,Python理解一个shell变量,指示要使用的编码。在重定向到文件之前设置以下环境变量:

PYTHONIOENCODING=utf8