print
ing delle stringhe Unicode si basa su sys.stdout
(standard output del processo) con una corretta attributo .encoding
che Python può utilizzare per codificare la stringa unicode in una stringa di byte per eseguire la stampa desiderata - e che l'impostazione dipende dal modo il sistema operativo è impostato, in cui viene indirizzato l'output standard e così via.
Se non esiste un attributo di questo tipo, viene utilizzato il codice codificato predefinito ascii
e, come si è visto, spesso non fornisce i risultati desiderati ;-).
È possibile controllare getattr(sys.stdout, 'encoding', None)
per vedere se la codifica è lì (se lo è, è sufficiente tenere le dita incrociate che è corretto ... o, forse, provare qualche trucco pesantemente specifico per piattaforma da indovinare sul sistema corretto codifica da verificare ;-). Se non lo è, in generale, non esiste un modo affidabile o multipiattaforma per indovinare cosa potrebbe essere. È possibile provare 'utf8'
, la codifica universale che funziona in molti casi (sicuramente più di ascii
fa ;-), ma è davvero un giro della ruota della roulette.
Per maggiore affidabilità, il programma dovrebbe avere il proprio file di configurazione per dirgli quale codifica di uscita utilizzare (magari con 'utf8'
come predefinito se non diversamente specificato).
E 'anche meglio, per la portabilità, per svolgere la propria codifica, cioè, non
print someunicode
ma piuttosto
print someunicode.encode(thecodec)
e in realtà, se si preferisce avere in uscita incomplete di un incidente,
print someunicode.encode(thecodec, 'ignore')
(che salta semplicemente n on-codificabili caratteri), o, in genere meglio,
print someunicode.encode(thecodec, 'replace')
(che utilizza segnaposto punto interrogativo per i caratteri non codificabili).
Quali versioni di sistema operativo e Python sono in esecuzione i server? – Puddingfox
Ubuntu 10.04 Server sia – Soid
sia Python 2.6.5 – Soid