2013-12-13 5 views
19

Quando si esegue R all'interno di Apache, le impostazioni locali vengono ereditate dal server Web Apache e pertanto Sys.getlocale() è sempre uguale a "C". Vorrei che la mia applicazione web per utilizzare UTF8, per cui uso:Impostare le impostazioni internazionali sul sistema predefinito UTF-8

Sys.setlocale("LC_ALL", 'en_US.UTF-8') 

Tuttavia questo non funziona su computer che non dispongono di questo locale a disposizione:

1: Setting LC_CTYPE failed, using "C" 
2: Setting LC_COLLATE failed, using "C" 
3: Setting LC_TIME failed, using "C" 
4: Setting LC_MESSAGES failed, using "C" 
5: Setting LC_MONETARY failed, using “C” 

C'è un modo per utilizzare Sys.setlocale per impostare le impostazioni internazionali sul valore predefinito del sistema UTF-8? Cioè qualcosa che potrebbe funzionare anche su Windows o un Linux tedesco?

+0

Avete considerato di impostare la codifica su "UTF-8" su qualsiasi letture dall'esterno? –

+0

Non sono sicuro di cosa intendi – Jeroen

+0

Stavo ricordando male qualcosa che ho letto all'inizio di questa settimana su rdev. Forse uno di questi aiuterà: http://stackoverflow.com/questions/9387910/losing-locale-when-running-fcgi-script http://stackoverflow.com/questions/17985201/encoding-is-not-proper- when-query-from-apache-php/18079287 # 18079287 http://stackoverflow.com/questions/5674519/why-php-developers-cant-provide-setlocale-function-as-per-thread-scope –

risposta

1

Rispondendo alla mia domanda: Su Ubuntu di default LANG è definito in /etc/default/locale:

[email protected]:~⟫ cat /etc/default/locale 
# Created by cloud-init v. 0.7.7 on Wed, 29 Jun 2016 11:02:51 +0000 
LANG="en_US.UTF-8" 

Così in R potremmo fare qualcosa di simile:

readRenviron("/etc/default/locale") 
LANG <- Sys.getenv("LANG") 
if(nchar(LANG)) 
    Sys.setlocale("LC_ALL", LANG) 

Apache ha anche una linea in /etc/apache2/envvars che può essere decommentato per abilitare questo.

2

Prova questa:

Sys.setlocale(category = "LC_ALL", locale = "English_United States.1252") 
+0

Funziona solo Su Windows? – Jeroen

+0

Sì, è corretto. L'ho provato solo su Windows 7, 64 bit. Non sono sicuro delle versioni di Linux, ma ricordo che una volta ho avuto questo problema su Ubuntu, e ho seguito le istruzioni su questo link per modificare le mie impostazioni locali. http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue. Per favore non citatemi per versioni di Linux, perché non ne sono sicuro. – Sathish

+1

L'ho appena testato sulla mia macchina Ubuntu. Ho seguito il collegamento nel mio commento precedente. Quindi, ho aperto una nuova sessione "R". Le impostazioni locali sono state automaticamente cambiate in en_US.UTF8. Se si desidera ripristinare il tipo di locale "C" o il tipo "POSIX", utilizzare la funzione: Sys.setlocale (category = "LC_ALL", locale = "C"). HTH – Sathish

1

Credo che è necessario effettuare un controllo per il sistema operativo. I nomi delle impostazioni locali differiscono per il sistema operativo, vedere gli esempi nel file della guida.

?Sys.getlocale() 

Examples 

Sys.getlocale() 
Sys.getlocale("LC_TIME") 
## Not run: 
Sys.setlocale("LC_TIME", "de")  # Solaris: details are OS-dependent 
Sys.setlocale("LC_TIME", "de_DE.utf8") # Modern Linux etc. 
Sys.setlocale("LC_TIME", "de_DE.UTF-8") # ditto 
Sys.setlocale("LC_TIME", "de_DE") # OS X, in UTF-8 
Sys.setlocale("LC_TIME", "German") # Windows 

## End(Not run) 
Sys.getlocale("LC_PAPER")   # may or may not be set 

## Not run: 
Sys.setlocale("LC_COLLATE", "C") # turn off locale-specific sorting, 
            # usually, but not on all platforms 
## End(Not run)