在Rscript.exe中处理包含Unicode字符的文件路径

9

我正在尝试将一个SVG图像保存到包含Unicode字符的文件路径中。例如:

n = c(2, 3, 5)
s = c("aa", "bb", "cc") 
b = c(TRUE, FALSE, TRUE) 
df = data.frame(n, s, b)

svg("c:/נועם/plots.svg")
plot(df)
dev.off() 

使用Rscript.exe运行此命令会导致以下错误:

Error in plot.new() : cairo error 'error while writing to output stream'

如何解决这个问题?


2
似乎是一个Windows问题。 - user3710546
3
我建议在一开始时不要创建希伯来语目录名称。根据我的经验,仅使用英语是最安全的做法,以避免此类问题和其他潜在问题的发生。 - David Arenburg
另外,看看当您执行 normalizePath("c:/נועם/plots.svg") 时会发生什么。 - David Arenburg
希伯来语只是一个例子。该脚本试图写入用户本地文件夹(c:/users/<username>),当帐户用户名包含Unicode字符时,我遇到了这个错误。 - Noam Behar
2
作为系统管理员,我支持David的建议,请不要使用除ASCII字母以外的任何字符。带Unicode的用户名会导致问题,Home目录难以管理,NTFS上的权限有时会挂起等等。如果要修复脚本,请将其编写到用户的Home目录以外。如果安全/权限是一个问题,请管理它们,而不是依赖于文件在最后应该处于的状态,因为无论如何都不能保证。 - Tensibai
我赞同这是操作系统漏洞的说法。 - Rick James
2个回答

0

您可以将工作目录设置为具有希伯来语名称的目录,然后保存svg文件。请参见下面的代码:

n <- c(2, 3, 5)
s <- c("aa", "bb", "cc") 
b <- c(TRUE, FALSE, TRUE) 
df <- data.frame(n, s, b)
setwd("C:\\נועם\\")
svg("plots.svg")
plot(df)
dev.off() 

0
来晚了,但我认为将路径包装在enc2native()函数中通常可以解决Windows下的编码问题,根据我的经验。在你的情况下,你应该尝试一下。
svg(enc2native("c:/נועם/plots.svg"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接