- 已编辑
问题描述
在工作文件夹C:/Users/kangj/Documents/R/Other/Cosx_markdown_dir/File下创建两个PDF文件,分别命名为"京都市.pdf"和"Kyoto.pdf",其中前者用日语或者中文输入应该都行。然后写代码列出文件夹中的文件名,并且看看通过这两个文件名能否查找到对应文件。结果这段代码在R Markdown文件(扩展名.Rmd
)和R Script(扩展名.R
)中运行出来的结果不一致,详述如下,请问:
- 是不是跟R Markdown的字符编码有关?如果是的话,应该如何解决?
- 稍微拓展一下问题,想请教如何生成可以直接用于论坛发帖的代码和结果文本?发帖的时候通常要粘贴代码,我之前通常都是从RStudio的Console面板上将代码及运行结果复制出来,但是这样操作有个问题是,每句代码前面会有个
>
符号,且结果前面也没有井号#
,不方便其他人复制运行,所以需要自己增加和替换一些符号。每次都这样操作有点麻烦,因此想用R Markdown生成文本后直接复制粘贴到论坛上,毕竟R Markdown生成的文本中,结果紧随着对应代码,且结果前面有两个井号,其他人可以直接复制到自己的电脑上运行。
代码和结果
我的电脑非Unicode程序语言设置为日语,详细位置是Settings > Region > Additional date, time & regional > Change date, time, or number format > Administrative > Language for non-Unicode programs settings。
在R Markdown中,头部设置如下:
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_knit$set(root.dir = "C:/Users/kangj/Documents/R/Other/Cosx_markdown_dir/File")
相关代码如下:
# 在R Markdown中可以不运行下面这句,因为已经在头部规定了路径
setwd("C:/Users/kangj/Documents/R/Other/Cosx_markdown_dir/File")
getwd()
# 下面这句代码其实是让Sys.setlocale恢复到初始设置
Sys.setlocale(category = "LC_ALL", locale = "English")
list.files()
"京都市.pdf" %in% list.files()
"Kyoto.pdf" %in% list.files()
# Sys.setlocale改为日文会怎么样?
Sys.setlocale(category = "LC_ALL", locale = "Japanese")
list.files()
"京都市.pdf" %in% list.files()
"Kyoto.pdf" %in% list.files()
点击Knit
后结果生成到RStudio右下方Viewer面板,如下:
# 在R Markdown中可以不运行下面这句,因为已经在头部规定了路径
setwd("C:/Users/kangj/Documents/R/Other/Cosx_markdown_dir/File")
getwd()
## [1] "C:/Users/kangj/Documents/R/Other/Cosx_markdown_dir/File"
# 下面这句代码其实是让Sys.setlocale恢复到初始设置
Sys.setlocale(category = "LC_ALL", locale = "English")
## [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;
##LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
list.files()
## [1] "‹ž“sŽs.pdf" "Kyoto.pdf"
"京都市.pdf" %in% list.files()
## [1] FALSE
"Kyoto.pdf" %in% list.files()
## [1] TRUE
# Sys.setlocale改为日文会怎么样?
Sys.setlocale(category = "LC_ALL", locale = "Japanese")
## [1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;
##LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
list.files()
## [1] "Kyoto.pdf" "京都市.pdf"
"京都市.pdf" %in% list.files()
## [1] FALSE
"Kyoto.pdf" %in% list.files()
## [1] TRUE
同样这段代码在R Script中运行的结果,和R Markdown结果相比,差别只有一处,在Sys.setlocale()
改为日文后的部分:
# Sys.setlocale改为日文会怎么样?
Sys.setlocale(category = "LC_ALL", locale = "Japanese")
##[1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;
##LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932"
list.files()
##[1] "Kyoto.pdf" "京都市.pdf"
"京都市.pdf" %in% list.files()
##[1] TRUE
"Kyoto.pdf" %in% list.files()
##[1] TRUE
两个结果对比如下表: