Forum >> Programmazione Python >> Database >> lettere accentate

Pagina: 1

se uso u"attività" il programma funziona, di conseguenza vorrei sapere: come posso usare la u su una variabile ?


Ho provato diverse soluzioni ma non funzionano (tipo variabile.encode(...) e altro)

grazie

modifica:
versione python 2.6 e vorrei mantenerla :)









--- Ultima modifica di luigi6 in data 2019-02-04 20:55:06 ---
e questo con il database c'entra perché................?
e questo con il database c'entra perché................?
Nulla. :(
Eh sì, in questo caso probabilmente sì... Anche se nel mondo reale i database sono spesso una fonte di curiosi problemi unicode.


Detto questo, ho anche paura che il problema dell'OP non sia unicode, ma sia la comprensione di che cosa è una variabile e che cosa è un oggetto.


Una variabile è un riferimento che punta a un oggetto. Un oggetto che rappresenta una stringa di testo, in py2, può essere un oggetto "str" (una sequenza di bytes con encoding arbitrario) oppure un oggetto "unicode" (una sequenza di code point unicode). Quindi non esistono "variabili con la u davanti", semmai esistono "oggetti con la u davanti" (perché la "u" è un modo per specificare che il literal seguente va inteso come oggetto unicode e non come bytes).


Se l'OP è sicuro che la sua variabile punta a un oggetto unicode, bene. Se l'OP è sicuro che la sua variabile punta a un oggetto "str", bene lo stesso. Se l'OP non è sicuro se la sua variabile si riferisce a un oggetto unicode o un oggetto str, molto male ma non c'è niente da fare (tranne provare a indovinare, si capisce).


Se poi l'OP ha una variabile che punta a un oggetto "str" e vuole castare questo oggetto da "str" a "unicode", può usare la funzione globale "unicode" documentata qui: https://docs.python.org/2.7/library/functions.html#unicode . Per fare questo, ovviamente (ovviamente!) deve conosce l'encoding in cui è encodata la sua stringa di bytes. Se non conosce l'encoding di quei bytes, allora è nei guai (e deve tirare a indovinare).





(detto questo, disclaimer standard: l'idea che l'OP abbia py2.6 e "vorrebbe mantenerla" nel 2019 è onestamente e sinceramente una follia. L'unica speranza è che nessuno ma proprio nessun altro debba mai usare il codice scritto dall'OP).

Cerco di spiegarlo meglio, ho fatto un po' di casino


Questa conversione mi serve per dei dati che voglio portare su mysql, e in origine la mia intenzione era quella di porvi la domanda relativamente al database. Poi nello scriverla mi sono completamente dimenticato di mysql in quanto li aggiungerò tramite phpmyadmin.




Il problema è questo:

Ho un programma con tutti i file impostati con coding: iso-8859-1 (la seconda riga di ogni file).
Questo programma ha la funzione di memorizzare dei dati su file tramite pickle con dump di liste.




All'interno ci sono dati con lettere accentate e qualche carattere speciale (tipo ' è ), e nella conversione mi da questo errore:





'ascii' codec can't decode byte 0xe0 in position 12: ordinal not in range( 128 )




succede su una parola ("attività") ,questo se non uso nulla per utf-8.





L'errore è su una riga dove unisco più stringhe :


str= str1 + str-con-lettera-accentata + str2.




Poi ho fatto varie prove con errori diversi, ma il punto di partenza è quello che ho spiegato.




L'intenzione è quella di scrivere un file di istruzioni sql e poi darlo in pasto a phpmyadmin




Scusate per l'errore ma l'intenzione era quella di usare mysql, ma è anche vero che ho fatto l'errore di non specificarlo.









--- Ultima modifica di luigi6 in data 2019-02-05 12:37:51 ---

--- Ultima modifica di luigi6 in data 2019-02-05 12:38:39 ---
Risolto...

in pratica alcune stringhe non erano codificate bene da impostazione di programma (la classica seconda riga).

Partendo da wxpython, ho usato la format di wxdatetime ma non codifica nel modo impostato da programma.


In questo modo : str-dopo-format=str-dopo-format.encode("iso-8859-1").

Ma non solo questa anche altre stringhe.




Devo decidermi a cambiare tutto con il nuovo python ma il lavoro è lungo, ho diversi programmi.








Pagina: 1



Esegui il login per scrivere una risposta.