Verwendung von Wochentagen mit einem beliebigen Gebietsschema unter Windows

8

Ich versuche, den Wochentag zu bekommen, und lasse ihn in jedem Ort konsistent arbeiten. In Lokalen mit lateinischen Alphabeten ist alles in Ordnung.

%Vor%

Ich habe zwei verwandte Probleme mit anderen Gebietsschemas.

Wenn ich

einstelle %Vor%

dann bekomme ich manchmal (richtig)

%Vor%

und manchmal

%Vor%

abhängig von meiner Einrichtung. Das Problem ist, ich kann nicht herausfinden, was den Unterschied verursacht.

Ich dachte, es könnte etwas mit getOption("encoding") zu tun haben, aber ich habe versucht, options(encoding = "native.enc") und options(encoding = "UTF-8") explizit zu setzen, und das macht keinen Unterschied.

Ich habe mehrere aktuelle Versionen von R ausprobiert, und das Problem ist bei allen konsistent.

Momentan wird die Zeichenfolge korrekt in R GUI angezeigt, aber falsch, wenn ich eine IDE verwende (Architect und RStudio getestet).

Was muss ich einstellen, um sicherzustellen, dass Wochentage immer korrekt angezeigt werden?

Es kann hilfreich sein zu wissen, dass weekdays(Sys.Date()) äquivalent zu format(as.POSIXlt(Sys.Date()), "%A") ist, was eine interne Methode format.POSIXlt aufruft.

Zweitens scheint es zu übertrieben, das gesamte Gebietsschema zu ändern. Ich dachte, ich sollte einfach die Zeitoptionen einstellen können. Wenn ich jedoch einzelne Komponenten des Gebietsschemas einstelle, gibt weekdays eine Reihe von Fragezeichen zurück.

%Vor%

Welche Teile der Ländereinstellung wirken sich auf die Wochentage aus?

Update: Das Problem scheint Windows-bezogen zu sein. Wenn ich den Code in einer Linux-Box mit dem Gebietsschema "ar_QA.UTF8" ausfühle, werden die Wochentage korrekt angezeigt.

Weitere Aktualisierung: Wie in seiner Antwort erwähnt, ist das Setzen von Locales unter Windows merkwürdig, da Sie nicht einfach ISO-Codes wie "en-GB" verwenden können. Für Windows 7 / Vista / Server 2003 / XP können Sie ein Gebietsschema mit setlocale Sprache festlegen Strings oder Support für die nationale Sprache . Für Qatari-Arabisch gibt es keine setlocale Sprachzeichenfolge, daher müssen wir einen NLS-Wert verwenden. Wir haben mehrere Möglichkeiten:

%Vor%

Das Problem ist also nicht, dass R arabische Gebietsschemas unter Windows nicht unterstützen kann (obwohl ich nicht ganz von der Robustheit von Sys.setlocale überzeugt bin).

Verzweifelter letzter Versuch: Der Versuch, Dinge magisch mit dem Befehl Windows Management Instrumentation zu beheben, um das Gebietsschema des Betriebssystems zu ändern, funktioniert nicht, da R die Änderungen nicht zu erkennen scheint.

%Vor%     
Richie Cotton 28.10.2014, 08:15
quelle

2 Antworten

4

Das System zur Benennung von Gebietsschemas ist betriebssystemspezifisch. Ich empfehle Ihnen, die Gebietsschemata von R Installation and Administration zu lesen Handbuch für eine vollständige Erklärung.

unter Windows:

Die Liste der unterstützten Sprachen ist MSDN Language Strings aufgeführt. Und überraschenderweise gibt es dort keine arabische Sprache. Die Spalte "Sprachzeichenfolge" enthält die zulässige Eingabe für das Festlegen der Ländereinstellung in R und sogar in der Liste contry / strings strings dort wird dort kein arabisch gesprochen.

Natürlich können Sie Ihre globalen Einstellungen ändern (Panel-Einstellung - & gt; region - & gt; ..), aber dies wird global geändert und es ist nicht sicher, die richtige Ausgabe ohne Kodierungsproblem zu bekommen.

>

unter Linux (in meinem Fall ubuntu):

Arabisch wird normalerweise nicht standardmäßig unterstützt, aber es ist einfach, es mit locale zu setzen.

%Vor%

unter RStudio jetzt:

%Vor%

Beachten Sie auch, dass unter R-Konsole das Drucken nicht so schön ist wie in R Studio, da es von links nach rechts und nicht von rechts nach links geschrieben wird.

    
agstudy 28.10.2014 08:56
quelle
4

Das RStudio / Architekt-Problem

Dies kann leicht unordentlich gelöst werden, indem die Codierung der Wochentagszeichenfolge explizit in UTF-8 geändert wird.

%Vor%

Beachten Sie, dass Codepages nur unter Windows existieren. l10n_info()$codepage ist NULL unter Linux.

Das LC_TIME-Problem

Es stellt sich heraus, dass Sie unter Windows die Gebietsschema-Kategorien LC_CTYPE und LC_TIME festlegen müssen, und Sie müssen LC_CTYPE vor LC_TIME setzen, sonst nicht arbeiten.

Am Ende benötigen wir verschiedene Implementierungen für verschiedene Betriebssysteme.

Windows-Version:

%Vor%

Linux-Version:

%Vor%

Das Erzwingen der .utf8 -Kodierung in der Ländereinstellung scheint wichtig zu sein get_today_linux("zh_TW") wird nicht richtig angezeigt.

    
Richie Cotton 28.10.2014 13:03
quelle