2013-03-29 18 views
7

Tôi đang sử dụng Windows 7, R2.15.3 và RStudio 0.97.320 với knitr knitr_1.1.6 (tải về sau khi Yihui cố định 'Encoding: knitr và con files' vấn đề vào ngày 12)Có tùy chọn đan để buộc mã hóa UTF-8 trong các tệp R được bao gồm không?

> sessionInfo() 
R version 2.15.3 (2013-03-01) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=Spanish_Argentina.1252 LC_CTYPE=Spanish_Argentina.1252 LC_MONETARY=Spanish_Argentina.1252 
[4] LC_NUMERIC=C      LC_TIME=Spanish_Argentina.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] lattice_0.20-13 pixmap_0.4-11  RColorBrewer_1.0-5 ade4_1.5-1   pander_0.3.1  
[6] xtable_1.7-1  

loaded via a namespace (and not attached): 
[1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 grid_2.15.3 knitr_1.1.6 stringr_0.6.2 tools_2.15.3 

Tôi có tôi đang R trong một file như thế này:

## @knitr RunMyCode 
print('Called from .R file: á é í ó ú ñ') 

# Workaround 
my.text <- 'á é í ó ú ñ' 
Encoding(my.text) <- "UTF-8" 
print(my.text) 

tôi gọi nó từ một tập tin RMD như thế này:

Title 
======================================================== 
Spanish text: á é í ó ú ñ 

Use it from .Rmd code: it comes out right... 
```{r} 
print('á é í ó ú ñ') 
``` 

```{r ReadFunctions, cache=FALSE, echo=TRUE, eval=TRUE} 
read_chunk('TestSpanishText.R') 
``` 

Spanish text comes out garbled here: 
```{r RunMyCode, echo=TRUE, eval=TRUE, cache=TRUE, dependson=c('ReadFunctions')} 
``` 

vấn đề của tôi là với các nhân vật Tây Ban Nha đã gõ trong file .R (được mã hóa UTF-8 trong RStudio). Các ký tự này là OK nếu được nhập vào các tệp Rmd ​​(cả tệp cha và con đều hoạt động tốt), nhưng không phải trong các tệp R. Như bạn có thể thấy bên dưới, Encoding() cung cấp giải pháp thay thế, nhưng tôi tự hỏi liệu có cách nào khác, chẳng hạn như tùy chọn toàn cầu không? Nếu tôi sử dụng Mã hóa(), tôi gặp vấn đề nghịch đảo trong bảng điều khiển RStudio ...

Title 

Spanish text: á é í ó ú ñ 

Use it from .Rmd code: it comes out right... 

print("á é í ó ú ñ") 
## [1] "á é í ó ú ñ" 
read_chunk("TestSpanishText.R") 

Spanish text comes out garbled here:  
print("Called from .R file: á é í ó ú ñ") 
## [1] "Called from .R file: á é í ó ú ñ" 

# Workaround 
my.text <- "á é í ó ú ñ" 
Encoding(my.text) <- "UTF-8" 
print(my.text) 
## [1] "á é í ó ú ñ" 

Cảm ơn bạn!

Trả lời

5

Lý tưởng nhất là tôi nên có một cuộc tranh cãi encoding trong read_chunk(), nhưng kể từ khi bạn đang sử dụng UTF-8, điều này có lẽ hoạt động:

read_chunk(lines = readLines("TestSpanishText.R", encoding = "UTF-8")) 

Vui lòng thử này đầu tiên. Nếu nó không hoạt động, tôi sẽ thêm một đối số encoding. Dù sao, tôi chắc chắn rằng điều này chắc chắn hoạt động (nó chỉ là hơi lâu hơn):

con = file("TestSpanishText.R", encoding = "UTF-8") 
read_chunk(con) 
close(con) 
+0

Giải pháp đầu tiên hoạt động tuyệt vời !! Cảm ơn bạn Yihui !! – ap53

+0

Tôi đã thử phương pháp này ('con = file (" TestSpanishText.R ", mã hóa =" UTF-8 "); read_chunk (con); close (con)') cho vấn đề của tôi: https://stackoverflow.com/questions/48307007/in-utf-8-nga-ký tự-in-r-rmd-knitr, nhưng không thể làm cho nó hoạt động. ??? – IVIM