Domanda

Vedo alcuni framework come Django che usano Unicode ovunque, quindi sembra che potrebbe essere una buona idea.

D'altra parte, sembra un grande dolore avere tutti questi extra che fluttuano ovunque.

Quale sarà un problema se non lo faccio?

Ci sono problemi che sorgeranno se lo faccio?

Sto usando Pylons in questo momento come framework.

È stato utile?

Soluzione

In Python 3, tutte le stringhe sono Unicode. Quindi, puoi prepararti per questo usando le stringhe u '' ovunque tu abbia bisogno, e poi quando esegui l'upgrade a Python 3 usando lo strumento 2to3 tutto lo u scomparirà. E sarai in una posizione migliore perché avrai già testato il tuo codice con stringhe Unicode.

Vedi Testo vs. Dati anziché Unicode vs. 8 bit per ulteriori informazioni.

Altri suggerimenti

Puoi evitare u '' in python 2.6 facendo:

from __future__ import unicode_literals

Ciò renderà 'string letterals' come oggetti unicode, proprio come in python 3;

  

Quale sarà un problema se non lo faccio?

Sono un occidentale che vive in Giappone, quindi ho visto in prima persona ciò che è necessario per lavorare con caratteri non ASCII. Il problema se non usi le stringhe Unicode è che il tuo codice sarà una frustrazione per le parti del mondo che usano qualcosa di diverso dalla A-Z. La nostra azienda ha avuto una grande frustrazione nel far sì che determinati software Web eseguissero i caratteri giapponesi senza farne un casino totale.

È sufficiente un piccolo sforzo per chi parla inglese per capire quanto sia grande Unicode, ma è davvero un lavoro formidabile rendere i computer accessibili a tutte le culture e lingue.

" Gotchas "

  1. Assicurati che le tue pagine web di output dichiarino che la codifica viene utilizzata correttamente (ad es. usando l'intestazione di codifica del contenuto), quindi codifica correttamente tutte le stringhe Unicode all'output. Le stringhe Unicode di Python 3 sono un grande miglioramento per farlo bene.

  2. Esegui tutto con le stringhe Unicode e converti solo in una codifica specifica all'ultimo momento, quando esegui l'output. Altre lingue, come PHP, sono soggette a bug durante la manipolazione di Unicode ad es. Modulo UTF-8. Supponi che devi troncare una stringa Unicode. Se è in formato UTF-8 internamente, c'è il rischio che si possa tagliare un carattere multi-byte a metà strada, con conseguente emissione di immondizia. L'uso interno delle stringhe Unicode da parte di Python rende più difficile commettere questi errori.

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

Per quanto riguarda i valori letterali delle stringhe nel codice sorgente: il prefisso u di solito non è necessario. Puoi tranquillamente mescolare oggetti str contenenti ASCII con oggetti unicode. Assicurati solo che tutti i letterali delle stringhe siano ASCII puri o che tu sia "unicode".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top