2009-05-05 12 views
6

Vedo alcuni framework come Django che utilizzano unicode dappertutto, quindi sembra che potrebbe essere una buona idea.La mia app web Python dovrebbe usare unicode per tutte le stringhe?

D'altra parte, sembra un grande dolore avere tutti questi extra in giro ovunque.

Quale sarà un problema se non lo faccio?

Ci sono problemi che si presenteranno se lo faccio?

Attualmente sto usando i piloni come framework.

risposta

10

In Python 3, tutte le stringhe sono Unicode. Quindi, è possibile prepararsi utilizzando le stringhe u'' ovunque sia necessario, quindi quando si esegue l'aggiornamento a Python 3 utilizzando lo strumento 2to3, tutti gli u s scompaiono. E sarai in una posizione migliore perché avrai già testato il tuo codice con stringhe Unicode.

Vedere Text Vs. Data Instead Of Unicode Vs. 8-bit per ulteriori informazioni.

19

È possibile evitare il u'' in Python 2.6 facendo:

from __future__ import unicode_literals 

che renderanno 'string literals' ad essere oggetti Unicode, proprio come è in Python 3;

+0

Impressionante. Suggerimento super utile. – baudtack

+0

+1 È un peccato che questo non possa essere combinato con la risposta selezionata. Entrambi sono la risposta "migliore" per affrontare questo problema. –

3

Quale sarà un problema se non lo faccio?

Sono un occidentale che vive in Giappone, quindi ho visto di prima mano ciò che è necessario per lavorare con caratteri non ASCII. Il problema se non si usano stringhe Unicode è che il codice sarà una frustrazione per le parti del mondo che usano qualcosa di diverso da A-Z. La nostra azienda ha avuto una grande quantità di frustrazione nell'ottenere certi software Web per fare personaggi giapponesi senza fare un casino totale.

Ci vuole un po 'di sforzo affinchè gli anglofoni apprezzino quanto sia grande l'Unicode, ma è davvero un bel po' di lavoro per rendere i computer accessibili a tutte le culture e lingue.

"trucchi":

  1. assicurarsi che nelle pagine web Stato uscita la codifica in uso corretto (per esempio usando intestazione Content-Encoding), e quindi codificare tutte le stringhe Unicode correttamente in uscita. Le stringhe Unicode di Python 3 sono un ottimo miglioramento per fare ciò correttamente.

  2. Fai tutto con le stringhe Unicode e converti solo in una specifica codifica all'ultimo momento, quando fai l'output. Altri linguaggi, come PHP, sono inclini a bug quando manipolano Unicode in es. Modulo UTF-8. Supponi di dover troncare una stringa Unicode. Se è internamente in formato UTF-8, c'è il rischio che si possa tagliare a metà un carattere multi-byte, con conseguente uscita di rifiuti. L'uso interno di stringhe Unicode da parte di Python rende più difficile l'esecuzione di questi errori.

+1

Sì. Se hai intenzione di fare * qualsiasi * tipo di manipolazione del testo (ad esempio cambiando le maiuscole, tagliando le parole in lettere), usa gli oggetti unicode di Python o sentirai dolore. –

1

L'utilizzo di Unicode internamente è un buon modo per evitare problemi con caratteri non ASCII. Converti ai limiti della tua applicazione (dati in entrata a Unicode, dati in uscita a UTF-8 o qualsiasi altra cosa). I piloni possono eseguire la conversione per te in molti casi: ad es. i controller possono tranquillamente restituire stringhe Unicode; I modelli SQLAlchemy possono dichiarare colonne Unicode.

Riguardo ai valori letterali stringa nel codice sorgente: il prefisso u di solito non è necessario. È possibile combinare in modo sicuro gli oggetti str contenenti ASCII con oggetti Unicode. Assicurati solo che tutti i tuoi valori letterali siano puri ASCII o "unicode".

Problemi correlati