Forum >> Principianti >> Codifica dei caratteri

Pagina: 1

Ciao, utilizzo IDLE con Python 3.8.0 in linux.
Ho due dubbi:


1) Quando si legge e si scrive un file bisogna specificare che la codifica adottata è UTF-8 o lo codifica automaticamente in questo formato?

2) Perché quando utilizzavo IDLE con Python 3.6.9 non stampava i pittogrammi Unicode tipo questo?

print(chr(129304))


L'errore indica che IDLE riconosce solo il set di caratteri codificati universali UCS-2, il quale non supporta caratteri al di fuori del Piano di Base Multilinguistico (000000-00FFFF)

print(chr(129304))
UnicodeEncodeError: 'UCS-2' codec can't encode character '\U0001f918' in position 0: Non-BMP character not supported in Tk


IDLE quindi può rappresentare solo i caratteri da chr(0) a chr(65535).

Se vado a stamparlo in un file però non dà errore, lo stampa correttamente:

a = open("output.txt", "w")
b = (chr(129304))
a.write(b)
a.close()
È possibile stampare i caratteri Non-BMP con IDLE 3.6.9?

Con IDLE 3.8 invece il carattere viene stampato, però all'esecuzione di ogni programma viene visualizzata sempre questa finestra, in cui è sufficiente cliccare OK e di cui non comprendo il significato.
In IDLE 3.6 non era presente.

Grazie in anticipo per la risposta.


--- Ultima modifica di EL DIABLO in data 2019-12-15 20:14:21 ---
Mah guarda... ti direi che il supporto unicode di idle (ma di tkinter in generale) è piuttosto evanescente. E questo è un capitolo del libro ancora più generale che si intitolola "lasciate perdere tkinter e godetevi la vita con un gui framework serio, grazie".


Io ho python 3.7 (in windows), e devo dire che anche per me a quanto pare l'encoding interno è ucs2... pazzesco... può darsi che in python 3.8 abbiano cambiato qualcosa, ma dovrei vedere... e onestamente non è che proprio muoio dalla voglia... Idle è un editor mediocre, insufficiente per i compiti più basilari... non lo uso comunque mai.


Boh? Ormai con un python moderno e un windows moderno, "print(chr(129304))" sulla shell riesce senza problemi. E suppongo anche su bash... quindi non mi porrei troppo il problema di idle/tkinter.

Grazie, e sai dirmi se quando si legge e si scrive un file bisogna specificare che la codifica adottata è UTF-8?
infile = open("input.txt", "r", encoding="utf-8")
outfile = open("output.txt", "w", encoding="utf-8")


Oppure il numero intero, assegnato al carattere dalla codifica Unicode, viene automaticamente convertito nella codifica binaria UTF-8 anche senza specificarlo?

Idle è un editor mediocre, insufficiente per i compiti più basilari


Per ora mi accontento di idle perché non so un c*.

Questa finestra che compare all'avvio di ogni programma in idle 3.7 e 3.8 hai idea a cosa serva?
Questo è un problema completamente differente, e anche più serio, se vogliamo.


Quando LEGGI da un file, dovresti conoscere l'encoding in cui è stato scritto (e non è affatto detto che sia utf8... e non c'è un modo garantito di saperlo...) e leggere con l'encoding giusto. Ovvio che se si tratta di un file che hai scritto tu in precedenza, saprai qual è l'encoding.

Quando SCRIVI in un file, allora:
- se il file esiste già e stai aggiungendo testo, come sopra: dovresti usare l'encoding del file
- se stai creando un file nuovo, allora regolati come credi... ovviamente diventa più pratico encodare in utf8 una volta per tutte e non pensarci più, anche se in realtà molto dipende dall'uso che poi devi fare di quel file.

Se NON imponi un encoding, allora... boh, qui non mi ricordo più che cosa succede... dovresti guardare la documentazione... probabilmente l'encoding usato è sys.getdefaultencoding, che però può essere diverso sulle varie piattaforme, quindi devi stare attento...




Quella finestrella non so da dove spunta... il suo significato è ovvio, ti chiede se vuoi aggiungere argomenti da passare all'esecuzione del tuo script... Ma non me la sono mai trovata davanti, magari è un'aggiunta recente... E non saprei eventualmente come disabilitarla... mah.



Pagina: 1



Esegui il login per scrivere una risposta.