2010-07-07 6 views
9

In console quando sto provando in uscita caratteri russi Mi dà ???????????????Come scrivere i caratteri russi nel file?

Chi sa perché?

Ho provato a scrivere su file, in questo caso la stessa situazione.

ad esempio

f=open('tets.txt','w') 
f.write('some russian text') 
f.close 

file all'interno di è - ?????????????????????????/

o

p="some russian text" 
print p 
????????????? 

Nel blocco note aggiuntivo non mi consente di salvare il file con lettere russe. Dico questo:

This file contains characters in Unicode format which will be lost if you save this file as an ANSI encoded text file. To keep the Unicode information, click Cancel below and then select one of the Unicode options from the Encoding drop down list. Continue?

Come regolare il mio sistema, quindi non avrò questi problemi.

+0

Il titolo di questa domanda è piuttosto scarsamente scelto! –

+0

È davvero '?' O meglio ' '? – Gumbo

+0

@Gumbo: il '?' Viene utilizzato quando il target non è in grado di * memorizzare * il carattere dato perché è al di fuori dell'intervallo di caratteri. Per esempio. database e output (file/stdout/etc) scrittori.Il ' ' viene usato quando il bersaglio è in grado di * visualizzare * il carattere dato, ma non lo fa perché è al di fuori dell'intervallo del set di caratteri che è stato istruito a usare. Per esempio. browser web. Tutto sommato, ha senso che "?" Sia stato usato qui. – BalusC

risposta

12

Ecco un esempio approfondito, si prega di leggere i commenti:

#!/usr/bin/env python2 
# -*- coding: utf-8 -*- 
# The above encoding declaration is required and the file must be saved as UTF-8 

from __future__ import with_statement # Not required in Python 2.6 any more 

import codecs 

p = u"абвгдежзийкл" # note the 'u' prefix 

print p # probably won't work on Windows due to a complex issue 

with codecs.open("tets.txt", "w", "utf-16") as stream: # or utf-8 
    stream.write(p + u"\n") 

# Now you should have a file called "tets.txt" that can be opened with Notepad or any other editor 
+0

ottengo l'errore: SyntaxError: carattere non ASCI '\ XFF 'nel file' il mio file python ', ma nessuna codifica dichiarata – Pol

+0

ho dichiarato la codifica, ecco a cosa serve la seconda riga. E non c'è il carattere '\ xff' (che è 'ÿ') nel file. Sei sicuro di aver fatto tutto correttamente e che tutti i caratteri vengano visualizzati correttamente nel Blocco note? – Philipp

1

Che console stai utilizzando? È probabile che la tua console non supporti quella lingua. Assicurati che la tua console supporti Unicode (e che la tua app invii stringhe Unicode).

Aggiornamento:

Per affrontare l'aggiornamento alla tua domanda per quanto riguarda problemi con il Blocco note di Windows': Fare clic su File-> Salva con nome e quindi scegliere 'Unicode' dall'elenco a discesa 'Codifica'.

+0

Ho provato 3 diverse console! Non è un'app ... – Pol

+1

Quali console hai provato? Quale sistema operativo stai usando? È possibile inviare caratteri russi alla console utilizzando un linguaggio di programmazione diverso da Python? – bta

+0

Non ho notato quando è successo. Ma è successo, dopo aver installato la stessa estensione come PYMSSQL e ODBC. Può essere fuori di esso? – Pol

2

È necessario definire la codifica del file se contiene caratteri non ASCII.

http://www.python.org/dev/peps/pep-0263/

+0

Ieri funzionava? – Pol

+0

Non aiuta! E anche quando sto seguendo il testo russo salvato nel Blocco note, mi dice che non posso salvare. Perché perdo i miei dati. – Pol

+0

Segui i consigli forniti da Blocco note e scegli una delle codifiche Unicode. – Philipp

0

Stai digitando in console troppo oppure solo seing i risultati in console? Questo sembra un problema di pep-0263 come diceva Petraszd.

print p.decode('your-system-encoding') 

dovrebbe funzionare in consolle (non so che cosa è il sistema di codifica si utilizza per il russo)

Se si utilizza un file .py, è necessario inserire # -*- coding: UTF-8 -*- (in sostituzione di utf-8 con codifica Rusian) nella parte superiore del file e penso che non sia necessario lo .decode in print se il sistema operativo è configurato con la codifica corretta. (Almeno io non ne ho bisogno, ma non so come funziona con la Russia)

+0

Quando sto scrivendo tutto va bene. Quando ho messo questo # - * - Codifica: UTF-8 - * - ottengo l'errore: SyntaxError: carattere non ASCI '\ xff' nel file – Pol

5

Provare ad aprire il file utilizzando i codec, è necessario

import codecs 

e poi

writefile = codecs.open('write.txt', 'w', 'utf-8')