2013-12-13 43 views
19

rをApacheで実行すると、ロケールはApache Webサーバーから継承されます。したがって、Sys.getlocale()は常に"C"に等しくなります。私はUTF8を使用するために自分のWebアプリケーションをしたいと思いますので、私は使用します。ロケールをシステムのデフォルトUTF-8に設定

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

しかし、これが可能なこのロケールていないマシンでは動作しません:

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” 

を使用する方法はありますSys.setlocaleロケールをシステムデフォルトのUTF-8に設定しますか?私。 WindowsやドイツのLinuxでも動作するものはありますか?

+0

"外部"からの読み取りでエンコーディングを 'UTF-8'に設定することを検討しましたか? –

+0

あなたは何を意味するのかわかりません – Jeroen

+0

今週初めにrdevで読んだことを間違っていたのです。おそらくこれらのうちの1つが役に立ちます: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 –

答えて

1

:Apacheは、ラインを持っている

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

:ようなので、Rに、私たちが何かを行うことができ

[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" 

:UbuntuではデフォルトLANG/etc/default/localeで定義されているがこれを可能にするためにコメントを外すことができる/etc/apache2/envvarsにあります。

2

はこれを試してみてください:

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

これは動作する窓に? – Jeroen

+0

はい、正しいです。私はそれをWindows 7、64ビットでのみテストしました。私はLinuxのバージョンについてはわかりませんが、ubuntuについてこの問題があったら覚えています。私はこのリンクの指示に従って自分のロケール設定を変更しました。 http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue。私は確信していないので、Linuxのバージョンのために私を引用しないでください。 – Sathish

+1

私はubuntuマシンでこれをテストしました。私は前のコメントでリンクをたどった。その後、私は新鮮な "R"セッションを開いた。ロケール設定は自動的にen_US.UTF8に変更されました。 "C"ロケールタイプまたは "POSIX"タイプに戻したい場合は、Sys.setlocale(category = "LC_ALL"、locale = "C")という関数を使います。 HTH – Sathish

1

私はあなたがOSのチェックを行う必要があり推測します。 OSによってロケール名が異なります。ヘルプファイルの例を参照してください。

自分の質問に答える
?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) 
関連する問題