2013-12-13 15 views
19

Khi chạy R bên trong rApache, ngôn ngữ được kế thừa từ máy chủ web Apache, và do đó Sys.getlocale() luôn bằng "C". Tôi muốn ứng dụng web của tôi để sử dụng UTF8, vì vậy tôi sử dụng:Đặt ngôn ngữ thành mặc định hệ thống UTF-8

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

Tuy nhiên điều này không làm việc trên máy mà không có locale này có sẵn:

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ó cách nào để sử dụng Sys.setlocale để đặt ngôn ngữ thành mặc định hệ thống UTF-8? I E. cái gì đó cũng sẽ hoạt động trên Windows hoặc Linux của Đức?

+0

Bạn đã cân nhắc đặt mã hóa thành 'UTF-8' trên bất kỳ lần đọc nào từ "bên ngoài"? –

+0

Tôi không chắc chắn ý của bạn là gì – Jeroen

+0

Tôi đã sai thứ gì đó mà tôi đã đọc vào đầu tuần này trên rdev. Có lẽ một trong những điều này sẽ giúp: http://stackoverflow.com/questions/9387910/losing-locale-when-running-fcgi-script http://stackoverflow.com/questions/17985201/encoding-is-not-proper- khi-query-from-apache-php/18079287 # 18079287 http://stackoverflow.com/questions/5674519/why-php-developers-cant-provide-setlocale-function-as-per-thread-scope –

Trả lời

1

Trả lời câu hỏi của riêng tôi: Trên Ubuntu mặc định LANG được định nghĩa trong /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" 

Vì vậy, trong R chúng ta có thể làm điều gì đó như:

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

Apache cũng có một dòng trong /etc/apache2/envvars có thể không được chú ý để kích hoạt tính năng này.

2

Hãy thử điều này:

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

Chỉ hoạt động trên cửa sổ? – Jeroen

+0

Vâng, đó là chính xác. Tôi đã thử nghiệm nó chỉ trên Windows 7, 64 bit. Tôi không chắc chắn về các phiên bản Linux, nhưng tôi nhớ một khi tôi đã có vấn đề này trên ubuntu, và tôi làm theo các hướng dẫn trên liên kết này để thay đổi cài đặt miền địa phương của tôi. http://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue. Xin vui lòng không báo cho tôi cho các phiên bản Linux, bởi vì tôi không chắc chắn. – Sathish

+1

Tôi vừa thử nghiệm điều này trên máy ubuntu của mình. Tôi đã theo liên kết trong bình luận trước của tôi. Sau đó, tôi đã mở một phiên "R" mới. Cài đặt ngôn ngữ được tự động thay đổi thành en_US.UTF8. Nếu bạn muốn hoàn nguyên về kiểu địa phương "C" hoặc loại "POSIX", hãy sử dụng hàm: Sys.setlocale (category = "LC_ALL", locale = "C"). HTH – Sathish

1

Tôi đoán bạn cần phải thực hiện một kiểm tra cho hệ điều hành. Các tên miền địa phương khác nhau theo hệ điều hành, xem các ví dụ tại tệp trợ giúp.

?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) 
Các vấn đề liên quan