2009-05-05 6 views
6

Widzę niektóre struktury takie jak Django używające Unicode w całym miejscu, więc wydaje się, że to może być dobry pomysł.Czy moja aplikacja internetowa Pythona powinna używać unicode dla wszystkich ciągów?

Z drugiej strony, wydaje się, że wielkim uciążliwym bodźcem jest to, że wszystkie te unoszące się wokół nas pływa.

Co będzie problemem, jeśli tego nie zrobię?

Czy są jakieś problemy, które się pojawią, jeśli to zrobię?

Używam Pylonów teraz jako moje ramy.

Odpowiedz

10

W języku Python 3 wszystkie ciągi znaków są w kodzie Unicode. Można się do tego przygotować, stosując ciągi znaków wszędzie tam, gdzie są potrzebne, a następnie po aktualizacji do wersji Python 3 przy użyciu narzędzia 2to3 wszystkie ikony u znikną. Będziesz w lepszej pozycji, ponieważ przetestowałeś już swój kod za pomocą ciągów Unicode.

Aby uzyskać więcej informacji, zobacz Text Vs. Data Instead Of Unicode Vs. 8-bit.

19

Można uniknąć u'' w Pythonie 2.6, wykonując:

from __future__ import unicode_literals 

To uczyni 'string literals' być Unicode obiektów, tak jak to jest w Pythonie 3;

+0

Awesome. Super przydatna wskazówka. – baudtack

+0

+1 Szkoda, że ​​nie można go połączyć z wybraną odpowiedzią. Obie są "najlepszą" odpowiedzią na ten problem. –

3

Co będzie problemem, jeśli tego nie zrobię?

Jestem mieszkańcem zachodniej części Japonii, więc widziałem z pierwszej ręki, co jest potrzebne do pracy ze znakami spoza ASCII. Problem polegający na tym, że nie używasz ciągów Unicode, oznacza, że ​​Twój kod będzie frustrujący dla części świata, które używają czegoś innego niż A-Z. Nasza firma doświadczyła ogromnej frustracji polegającej na tym, że niektóre programy internetowe robią japońskie znaki, nie robiąc z tego bałaganu.

Anglojęzycznych użytkowników wymaga trochę wysiłku, aby docenić świetny Unicode, ale naprawdę jest to świetna praca, aby komputery były dostępne dla wszystkich kultur i języków.

„pułapek”:

  1. Upewnij się, że wyjściowe stron internetowych podać kodowanie stosowane prawidłowo (na przykład za pomocą treści kodujący nagłówek), a następnie zakodować wszystkie ciągi Unicode poprawnie na wyjściu. Python 3 Unicode stringi to doskonała poprawa, aby to zrobić dobrze.

  2. Wykonuj wszystkie czynności za pomocą ciągów Unicode i konwertuj tylko do określonego kodowania w ostatniej chwili podczas wykonywania wydruków. Inne języki, takie jak PHP, są podatne na błędy podczas manipulowania Unicode w np. Formularz UTF-8. Powiedz, że musisz obciąć ciąg znaków Unicode. Jeśli jest w formularzu UTF-8 wewnętrznie, istnieje ryzyko, że w połowie drogi można odciąć znak wielobajtowy, co spowoduje powstanie śmieci. Używanie przez Python wewnętrznych ciągów Unicode utrudnia popełnianie tych błędów.

+1

Tak. Jeśli planujesz * dowolne * manipulowanie tekstem (na przykład zmiana wielkości liter, rąbanie słów na litery), użyj obiektów unicode Pythona lub poczujesz ból. –

1

Wewnętrzne używanie Unicode to dobry sposób na uniknięcie problemów ze znakami spoza zestawu ASCII. Konwertuj na granicach twojej aplikacji (przychodzące dane do Unicode, wychodzące dane do UTF-8 lub cokolwiek innego). Pylony mogą wykonać konwersję w wielu przypadkach: np. kontrolery mogą bezpiecznie zwracać ciągi znaków Unicode; Modele SQLAlchemy mogą deklarować kolumny Unicode.

Odnośnie literałów łańcuchowych w kodzie źródłowym: prefiks u zazwyczaj nie jest konieczny. Możesz bezpiecznie mieszać obiekty str zawierające ASCII z obiektami unicode. Po prostu upewnij się, że wszystkie twoje ciągi literowe są albo czystymi ASCII, albo są u "unicode".

Powiązane problemy