2015-08-20 5 views
5

इम पायथन में एक स्माइली प्रिंट करने का प्रयास:पाइथन 3 (और cmd.exe) एन्कोडिंग को कैसे व्यवस्थित करें?

यह इंटरैक्टिव खोल (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> 

पायथन-फ़ाइल यूटीएफ -8 एन्कोडेड है।


अद्यतन:

यहां तक ​​कि अगर वहाँ मेरी समस्या के लिए कोई वास्तविक anwer अभी तक नहीं है, यह प्रश्न के अंतर्गत टिप्पणी पढ़ने के लिए लायक है। मैंने cmd.exe (विंडोज 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 ■ 
+0

पिछले कुछ सप्ताहों में, मैं, भी, 'UnicodeEncodeError' के साथ संघर्ष कर दिया गया है, एक सरल alt साथ यूनिकोड वर्ण, यूनिकोड वर्ण विंडोज पर सुलभ प्रिंट करने का प्रयास cmd कंसोल पर cmd कंसोल पर रीडायरेक्ट करते समय, पावरहेल कंसोल पर, और पावरहेल से रीडायरेक्ट करते समय सामान्य अक्षर ठीक से cmd कंसोल पर। संक्षेप में, प्रत्येक प्रोग्राम, इनपुट विधि, और आउटपुट विधि एक अलग एन्कोडिंग और एक अलग कोड पेज और विभिन्न लाइन अंत का उपयोग करता है। यह एक गड़बड़ है। मैं 'try..except' और एक कामकाज के साथ एक docstring के एक समूह के साथ समाप्त हो गया। – TigerhawkT3

+0

हालांकि, मैं सत्यापित कर सकता हूं कि लिनक्स केडीई कंसोल की तरह एक देशी यूनिकोड (यूटीएफ -8) टर्मिनल या टर्मिनल एमुलेटर, बिना किसी समस्या वाले यूनिकोड वर्णों को संसाधित करता है। – TigerhawkT3

+0

मुझे इस [उत्तर] (http://stackoverflow.com/a/17177904/3900879) का उपयोग करके काम करने के लिए आपका उदाहरण मिला। मैंने अपना 'सेमीडी' फ़ॉन्ट' ल्यूसीडा कंसोल 'में बदल दिया और' chcp 65001' (कोड पेज [65001] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs .85% 29.aspx) यूटीएफ -8 है)। –

उत्तर

0

जब आप किसी फ़ाइल पायथन क्या एन्कोडिंग का उपयोग करना नहीं जानता है पर पुन: निर्देशित देता है। फ़ाइल में रीडायरेक्ट करना एक शेल ऑपरेशन है, और पायथन एक शैल वैरिएबल को समझता है जो उपयोग करने के लिए एन्कोडिंग को इंगित करता है। एक फ़ाइल के लिए पुनः निर्देशित करने से पहले निम्न वातावरण चर सेट करें:

PYTHONIOENCODING=utf8 
+0

इसलिए मैंने कमांडलाइन में 'SET PYTHONIOENCODING = utf8' दर्ज किया। (दाएं?) दुर्भाग्य से यह कुछ भी नहीं बदला ... क्या यूटीएफ -8 डिफ़ॉल्ट एन्कोडिंग नहीं है? – Daveman

+0

क्या आपने अपनी स्क्रिप्ट के आउटपुट को फाइल में रीडायरेक्ट किया था? डिफ़ॉल्ट कंसोल एन्कोडिंग यूटीएफ -8 नहीं है। जैसा कि आप अपने स्वयं के त्रुटि संदेश से देख सकते हैं, पायथन वर्तमान कंसोल कोड पेज का उपयोग करता है जो आपके सिस्टम पर 'cp850' था। –

संबंधित मुद्दे