use*_*041 7 r utf-8 character-encoding special-characters knitr
我正在使用knitr 1.1.在R 3.0.0和WinEdt(RWinEdt 2.0)中.我遇到了knitr识别瑞典字符(ä,ö,å)的问题.这不是R的问题; 这些字符甚至可以在文件名,目录名,对象等中识别.在Sweave中,它也不是问题.
我已经\usepackage[utf8]{inputenc}在我的文档中,但knitr似乎无法处理特殊字符.运行knitr后,我收到以下消息:
Warning in remind_sweave(if (in.file) input) :
It seems you are using the Sweave-specific syntax; you may need Sweave2knitr("deskriptiv 130409.Rnw") to convert it to knitr
processing file: deskriptiv 130409.Rnw
(*) NOTE: I saw chunk options "label=läser_in_data"
please go to http://yihui.name/knitr/options (it is likely that you forgot to
quote "character" options)
Error in parse(text = str_c("alist(", quote_label(params), ")"), srcfile = NULL) :
1:15: unexpected input
1: alist(label=lä
^
Calls: knit ... parse_params -> withCallingHandlers -> eval -> parse
Execution halted
Run Code Online (Sandbox Code Playgroud)
它抱怨的特定标签是label =läser.改变标签是不够的,因为如果R对象使用äåö,knitr甚至会抱怨.
我使用了Sweave2knitr()因为文件最初是为Sweave创建的,但结果并不是更好:现在所有的äå已经转换为äpÃ¥Ã,无论是R块还是乳胶文本,knitr仍然给出错误消息.
会话信息:
R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=Swedish_Sweden.1252 LC_CTYPE=Swedish_Sweden.1252 LC_MONETARY=Swedish_Sweden.1252
[4] LC_NUMERIC=C LC_TIME=Swedish_Sweden.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.1
loaded via a namespace (and not attached):
[1] digest_0.6.3 evaluate_0.4.3 formatR_0.7 stringr_0.6.2 tools_3.0.0
Run Code Online (Sandbox Code Playgroud)
正如我所提到的那样,文件名和对象都带有瑞典语字符(因为之前不存在问题),而且文本也需要使用瑞典语.
感谢您帮助让knitr在英语之外工作.
我认为如果您使用此模式调用,则必须联系 WinEdt 中R-Sweave 模式的维护者knitr。knit()问题是,如果您不使用操作系统的本机编码,WinEdt 必须将文件的编码传递给。您提到过UTF-8,但这不是 Windows 的本机编码,因此\\usepackage[utf8]{inputenc}除非您确定您的文件是 UTF8 编码的,否则不得使用。
这里有几个问题混合在一起,不可能用一个答案来解决所有问题。
\n\n第一个问题是label=l\xc3\xa4ser,实际上应该是label=\'l\xc3\xa4ser\',即您必须引用所有块标签(也请检查文档中的其他标签);knitr尝试在您编写时自动引用您的标签<<foo>>=(它变成了<<\'foo\'>>=),但这在您使用时不起作用<<label=foo>>=(您必须<<label=\'foo\'>>=显式编写)。但这个问题在这里也许并不重要。
我认为这里真正的问题是文件编码(在 Windows 下这很糟糕)。UTF-8您似乎在默认情况下不尊重的系统下使用UTF-8。在这种情况下,您可以调用knit(\'yourfile.Rnw\', encoding = \'UTF-8\'),即将编码传递给knit()。我不使用 WinEdt,所以我不知道该怎么做。您可以在配置中对编码进行硬编码,但不建议这样做。
两个建议:
\n\nUTF-8在Windows下使用;使用您的系统本机编码(Windows-1252我猜);knitr;BTW,既然Sweave2knitr()弹出了,那么你的Rnw文档一定还有其他问题。要诊断问题,有两种方法:
UTF-8,请运行Sweave2knitr(\'deskriptiv 130409.Rnw\', encoding = \'UTF-8\')Sweave2knitr(\'deskriptiv 130409.Rnw\')如果您对打印的诊断信息有疑问,请阅读文档Sweave2knitr()。
| 归档时间: |
|
| 查看次数: |
4465 次 |
| 最近记录: |