首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rhtml:警告:“mbcsToSbcs”中的“<var>”转换失败:<var>替换的点

Rhtml:警告:“mbcsToSbcs”中的“<var>”转换失败:<var>替换的点
EN

Stack Overflow用户
提问于 2012-11-06 13:03:12
回答 3查看 7.3K关注 0票数 15

环境:

R v. 2.15.1在Mac 10.8.2上,platform x86_64 apple-darwin9.8.0/x86_64(64位),其中RStudio IDE设置为使用UTF-8作为其默认编码。操作系统还使用UTF-8.

代码语言:javascript
运行
复制
> Sys.getlocale(category = "LC_ALL")
[1] "sk_SK.UTF-8/sk_SK.UTF-8/sk_SK.UTF-8/C/sk_SK.UTF-8/sk_SK.UTF-8"

目标:

从.Rhtml (.Rhtml)文件生成一个HTML文件,其中包含一个带有扩展拉丁字符(如š或č)的情节。

问题:

当我单击编织时,输出如下所示:

代码语言:javascript
运行
复制
plot(1:2, main = "šč")
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
## 
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
## 
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
## 
## Warning: conversion failure on 'šč' in 'mbcsToSbcs': dot substituted for
## <8d>
**Plot with correct characters despite the warnings.**

问题:

问题的原因是什么,如何解决?怎样才能至少消除显示在结果文件中的警告呢?

无望的注解:

在过去的一两个小时里,我一直在寻找一个解决方案,发现了许多类似的案例,并尝试了许多不同的潜在解决方案(许多与PDF输出相关,如果我只使用Sweave,就会以同样的方式被抛出),现在我简直没有希望了。

2012年11月9日编辑:

使用@metasequoia建议的Encoding()解决方案确实有效,但考虑到打印代码的需要,最好没有该函数,我更喜欢使用函数pdf.options()的@no葡萄提供的解决方案。

不过,有趣的是

代码语言:javascript
运行
复制
<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
plot(cars, main="Ťažký")
end.rcode-->

产生同样的警告,

代码语言:javascript
运行
复制
<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->

<!--begin.rcode
plot(cars, main="Ťažký")
end.rcode-->

按预期工作。,为什么?,我认为在R中运行命令时,时间顺序才是最重要的。

所以,就我的目的而言,明确的解决办法是

代码语言:javascript
运行
复制
<!--begin.rcode echo="FALSE"
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->

在我每一个密码的开头。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-08 23:17:26

“梅斯红杉”的答案很有效,但我想补充几点。如果将PDF选项设置为不同的编码,则不需要用Encoding包装所有输出文本。在单击针织HTML之前运行此命令

代码语言:javascript
运行
复制
pdf.options(encoding='ISOLatin2.enc')

Ripley谈到了a post here中的编码问题,特别是与PDF相关的问题,这可能会引起人们的兴趣。值得注意的是,此错误在Windows上不会以相同的方式发生,因为编码是以完全不同的方式处理的。

其他语言可能需要不同的编码文件,但这似乎适用于斯洛伐克语。

票数 8
EN

Stack Overflow用户

发布于 2012-11-09 16:56:20

只是为了解释你找到的解决方案:

代码语言:javascript
运行
复制
<!--begin.rcode
pdf.options(encoding='ISOLatin2.enc')
end.rcode-->

<!--begin.rcode
plot(cars, main="Ťažký")
end.rcode-->

当您将这两行放在同一个块中时,这是有效的,因为对于每个代码块,knitr会打开一个新的图形设备来记录绘图(默认情况下,它是一个PDF设备)。设置pdf.options()为时已晚,因为当您将pdf.options()plot()放在同一个块中时,设备已经用默认编码打开了。

在工作解决方案中,当PDF设备为第二个块打开时,它从前一个块中的设置继承编码;这就是它如何正确地生成字符。

如果不希望在每个Rhtml文件中设置此编码选项,则可以将其放在~/.Rprofile中,从而影响所有的PDF设备。或者定义自己的函数来编织Rhtml文件。

代码语言:javascript
运行
复制
knit2 = function(...) {
   pdf.options(encoding='ISOLatin2.enc')
   knitr::knit(...)
}

然后是knit2('yourfile.Rhtml')

票数 7
EN

Stack Overflow用户

发布于 2012-11-08 22:48:32

使用@no葡萄重复逼近一个示例(在Mac上使用R2.15.1):

代码语言:javascript
运行
复制
pdf()
plot(1:2,main="šč")
dev.off()

我复制了OP的错误代码。用Encoding()包装"šč“消除了警告消息。

代码语言:javascript
运行
复制
pdf()
plot(1:2,main=Encoding("šč"))
dev.off()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13251665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档