2012-03-28 14 views
2

Diese einfache scrit:Einstellung locale und String-Modul in Python

from locale import LC_ALL, setlocale 
print setlocale(LC_ALL,"") 
from string import letters 
print letters 

gibt mir diese Ausgabe:

tr_TR.utf8 
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 

Und hier: http://docs.python.org/library/string.html?highlight=string#string.letters sagt es, dass es Wert locale abhängig ist, und aktualisiert, wenn setlocale aufgerufen wird. Ich sehe jedoch keinen Brief von meinem Gebietsschema. Gibt es eine Möglichkeit, eine Liste von Buchstaben für das aktuelle Gebietsschema zu erhalten?

Antwort

2

Ich musste das Gebietsschema auf Türkisch ausdrücklich festgelegt, da dies nicht der Standard auf meinem Computer ist, aber es scheint mehr oder weniger Arbeit:

> python 
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 

>>> from locale import LC_ALL, setlocale 
>>> print setlocale(LC_ALL,"Turkish") 
Turkish_Turkey.1254 
>>> from string import letters 
>>> print letters 
abcdefghijklmnopqrstuvwxyzƒsoªµºßàáâaäåæçèéêëìíîïgñòóôoöoùúûüisÿ... 
    ABCDEFGHIJKLMNOPQRSTUVWXYZSOYAAAAÄÅÆÇEÉEEIIIIGÑOOOOÖOUUUÜIS 
>>> 

Der Ausgang grundsätzlich richtig aussieht (AFAIK) außer dem Einschluss von Q, W und X, die aus dem, was in diesem Wikipedia article ist, sind nicht Teil des türkischen Alphabets.

Update:

Um besser zu Ihrer Umgebung zu replizieren, habe ich zuerst die „Regions- und Sprachoptionen“ Bedienfeld und änderte meine Region „Türkisch“, die es den Standard für setlocale machen sollten. In der Tat hat es aber die Liste der Buchstaben immer noch OK —, so kann ich Ihr Problem nicht reproduzieren.

Ein Unterschied dieses Mal ist, dass ich vor dem Ausführen von Python zuerst die Konsolen-Codepage in Windows ANSI Turkish 1254 änderte, um die korrekte Anzeige von Zeichen aus dem Alphabet zu ermöglichen. Dadurch wurden die letzten beiden Buchstaben der Ausgabe richtig angezeigt, es enthält jedoch immer noch die Buchstaben Q, W und X, die nicht Teil des Alphabets sind (und falsch, um dort zu sein, in meiner Wahl).

C:\>chcp 1254 
Active code page: 1254 

C:\>python 
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from locale import LC_ALL, setlocale 
>>> print setlocale(LC_ALL,"") 
Turkish_Turkey.1254 
>>> from string import letters 
>>> print letters 
abcdefghijklmnopqrstuvwxyzƒšœªµºßàáâãäåæçèéêëìíîïğñòóôõöøùúûüışÿ... 
    ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖØÙÚÛÜİŞ 
>>> 
+0

+1 Wenn ich die cmd.exe-Codepage 857 (IBM PC Türkisch-Codepage) oder 1254 (Windows ANSI Türkisch-Codepage) gesetzt, bekomme ich die gleiche Leistung wie bei Ihnen, mit Ausnahme der türkischen Buchstaben angezeigt korrekt. Zum Beispiel werden die letzten zwei Buchstaben in Ihrer Ausgabe oben ("... IS") korrekt als "... İŞ" für beide 857 und 1254 ausgegeben. Wenn ich die Codepage auf 437 (US-Englisch Standard) setzen , dann bekomme ich genau die gleiche Ausgabe wie deine, wobei türkische Buchstaben in die nächsten ASCII-Äquivalente konvertiert werden (ohne die Akzente/diakritischen Zeichen). Für Codepage 65001 (Windows UTF-8) generiert Python LookupError: unbekannte Codierung: CP65001. – Sabuncu

+0

PS: Ich benutze Python 2.7.2. – Sabuncu

+0

@Sabuncu: Wenn ich zuerst die Cmd-Codepage auf Windows ANSI Türkisch mit einem 'chcp 1254' setze und dann die in meiner Antwort gezeigten Anweisungen erneut durchführe, sind die letzten beiden Zeichen der Ausgabe nun" İŞ "(läuft Python 2.7. 5). Der Ausgang enthält jedoch immer noch Q, W und X. Weißt du warum das so ist? – martineau