• R语言
  • Rmarkdown生成html时,中文显示乱码

下面是很简单的一段代码

---
title: "new article"
author: "None"
output: html_document
---

# display
I want to display the following chinese, but failed.

新的一天

```{r}
knitr::kable(
   mtcars[1:5, ],
   caption = "表格名称")

运行之后,网页的显示为
new article
None

display
I want to display the following chinese, but failed.

鏂扮殑涓€澶

knitr::kable(
mtcars[1:5, ],
caption = "琛ㄦ牸鍚嶇О")
琛ㄦ牸鍚嶇О

研究了一上午了,仍然没有找到解决方法。

    newlife

    一看就是编码问题,我的解决方法是统一编码为UTF-8, 在Rstudio里:

    • Tools - Project Options - Code Editing - 编码设为UTF-8
    • Tools - Global Options - Code - Saving - Default text encoding设为 UTF-8
    • 打开rmd, File - Save with Encoding - UTF-8

    目前在windows10和Ubuntu16.04下在Rmd里敲中文都没问题。

      tctcab 从网上查到了这种处理方法,也用了,结果还是不行,刚才又重新搞了一遍,又跪了。。。哎,对别人,这都是轻松就实现,问题还有可能出在什么地方

        newlife

        具体问题具体分析吧, 在Rstudio里执行sessioninfo()然后贴一下结果上来

          tctcab
          R version 3.5.0 (2018-04-23)
          Platform: x86_64-w64-mingw32/x64 (64-bit)
          Running under: Windows >= 8 x64 (build 9200)

          Matrix products: default

          locale:
          [1] LC_COLLATE=Chinese (Simplified)China.936
          [2] LC_CTYPE=Chinese (Simplified)
          China.936

          [3] LC_MONETARY=Chinese (Simplified)China.936
          [4] LC_NUMERIC=C

          [5] LC_TIME=Chinese (Simplified)
          China.936

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

          other attached packages:
          [1] ggplot2_2.2.1

          loaded via a namespace (and not attached):
          [1] Rcpp_0.12.17 digest_0.6.15 rprojroot_1.3-2 plyr_1.8.4

          [5] grid_3.5.0 gtable_0.2.0 backports_1.1.2 magrittr_1.5

          [9] scales_0.5.0 evaluate_0.10.1 pillar_1.2.3 highr_0.6

          [13] rlang_0.2.1 stringi_1.1.7 lazyeval_0.2.1 rmarkdown_1.9.17
          [17] labeling_0.3 tools_3.5.0 stringr_1.3.1 munsell_0.4.3

          [21] yaml_2.1.19 compiler_3.5.0 colorspace_1.3-2 htmltools_0.3.6
          [25] knitr_1.20 tibble_1.4.2

          tctcab
          还有就是在Rstudio中,是可以直接编码显示中文的,不会乱码。

          新 <- mtcars
          str(新)
          'data.frame': 32 obs. of 11 variables:
          $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
          $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
          $ disp: num 160 160 108 258 360 ...
          $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
          $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
          $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
          $ qsec: num 16.5 17 18.6 19.4 17 ...
          $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
          $ am : num 1 1 1 0 0 0 0 0 0 0 ...
          $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
          $ carb: num 4 4 1 1 2 1 4 2 2 4 ...

            tctcab
            木有问题的,我分析可能是安装的Rmarkdown有问题。但是我是用正常的语句安装的啊,应该也没问题啊
            devtools::install_github('rstudio/rmarkdown')

              newlife

              windows的编码问题确实得折腾啊…

              试试这个能不能编译成功:用UTF-8编码,我测试了一下,在win跟ubuntu下都没问题

              https://raw.githubusercontent.com/tcgriffith/cosx_exps/master/test_23.rmd

                newlife
                是在Rstudio里knitr成html 也正常显示中文了对吧,那更改 Rmd 的源文件编码应该就好,两种办法

                记事本,

                • 另存为- 选择编码为UTF-8

                Rstudio

                • 在Rstudio打开有问题的Rmd文件,
                • 保存Rmd,Save with encoding,然后选UTF-8,
                • 重新打开Rmd文档,编译

                  tctcab
                  我刚刚表达可能有偏差。。你刚才的那个链接,我在浏览器中输入,直接就显示了编译后的结果。。找不到代码。。。

                    newlife

                    打开那个链接,右键另存为本地文件, 然后Rstudio里打开,然后编译试试

                      tctcab
                      啊!!!我解决了。。但是好诡异好诡异好诡异。
                      解决方法是:
                      1、Rstudio都是按照你最早回复的那样设置的。。。
                      2、但是我的Rmd文件按照“ANSI—简体中文GBK”的形式保存,
                      3、在Rstudio中,用render语句执行Rmd文件,然后,然后,生成的网页的中文就正常显示了。。。。

                      tctcab
                      之前的乱码,就是“UTF-8”形式下编辑的中文,在“ANSI-简体中文GBK”格式下的展示内容。
                      而我的Rstudio是正常处理显示中文的,但是加载了Rmarkdown之后,却将UTF-8形式的转化为了ANSI形式的。。。这是为啥??

                      tctcab
                      更诡异的事情出现了。
                      我将代码用UTF-8形式存储为Rmd文件,然后在Rstudio中,选择打开改文件,之后再Rstudio中选择knit to html按钮,结果,结果,正常输出了html,中文正常显示了。。。
                      我的乖乖,这是为啥。。

                        newlife

                        正常了就好

                        如果精力实在旺盛可以试试如何复现最开始的问题,然后回来报告一下?

                          tctcab
                          但是使用render语句执行,仍然无法成功。。。我的系统真的好诡异