R打印一些unicode字符,但不打印其他字符

R打印一些unicode字符,但不打印其他字符,r,unicode,cairo,R,Unicode,Cairo,我们的系统管理员刚刚将操作系统升级到SLES12SP1。我重新安装了Rv3.2.3,并尝试进行绘图。我使用了cairo\u pdf并尝试绘制一个x标签为\u0298的图,即太阳符号,但它不起作用:标签只是空白。例如: cairo_pdf('Rplots.pdf') plot(1, xlab='\u0298') # the x-label comes up blank dev.off() 这曾经是有效的,但由于某种原因,它不再有效了。它适用于其他角色,例如 cairo_pdf('Rplots.p

我们的系统管理员刚刚将操作系统升级到SLES12SP1。我重新安装了Rv3.2.3,并尝试进行绘图。我使用了
cairo\u pdf
并尝试绘制一个x标签为
\u0298
的图,即太阳符号,但它不起作用:标签只是空白。例如:

cairo_pdf('Rplots.pdf')
plot(1, xlab='\u0298') # the x-label comes up blank
dev.off()
这曾经是有效的,但由于某种原因,它不再有效了。它适用于其他角色,例如

cairo_pdf('Rplots.pdf')
plot(1, xlab='\u2113') # the x-label comes up with the \ell symbol
dev.off()
当我只是粘贴在太阳符号,即

plot(1, xlab='ʘ')
然后我得到了警告

Warning messages:
1: In title(...) :
  conversion failure on 'ʘ' in 'mbcsToSbcs': dot substituted for <ca>

有关于如何让太阳符号出现的提示吗

也许您的文本编辑器使用的是拉丁文1,因此您可以向控制台发送拉丁文1字符

看看编码

Encoding('ʘ')
和/或尝试

plot(1, xlab=iconv('ʘ', from='latin1', to="UTF-8"))
但要小心,在应对时编码可能会改变。
如果您使用记事本+,您可以在文本编辑器中转换不同的编码。

注意:我想在使用新系统时,您应该首先执行以下操作:

capabilities() #And see what the result for cairo is.
虽然其中一个需要知道您使用的字体,但还是有一些想法,因此可能需要输出
l10n_info()$MBCS
名称(X11Fonts())

选项1)好时字体将所有占星术符号作为特殊转义字符。第4页的输出:

 demo(Hershey)   # has \\SO as the escape sequence for the "solar" symbol.
因此,查看
draw.vf.cell
函数的代码,我们看到它使用
text
函数来打印这些字符,因此使用它来标记轴需要将
xpd=TRUE
添加到参数中:

plot(1, xlab="") ; text(1, .45, "\\SO" , vfont=c("serif", "plain"), xpd=TRUE )

选项2)在您选择的字体中查找太阳符号。您可以尝试将字体设置为“Helvetica”以外的其他字体。请参阅关于Cairo字体的部分的
?X11
points
函数的帮助页面有一个名为TestChars的函数,可以将各种字体的字符字形打印到输出设备上。在这种情况下,您的输出设备可能是
cairopdf
x11
。在我的设备(UNIX的Mac fork)上,Arial字体具有以下输出:

   png(type="cairo-png");plot(1, xlab="\u0298");dev.off()
我多年来对类似问题的观察使我相信Cairo图形更可靠地跨平台。但是,由于R可以在没有cairo支持的情况下编译,所以这不是一件确定的事情


另外,>编码(“ʘ”)[1]“UTF-8”我不知道,但问题可能是您不使用德语作为本地语言
Sys.setlocale(“LC_TIME”,“de_de.UTF-8”)
我使用R版本3.2.3(2015-12-10)并将其作为区域设置:[1]LC_CTYPE=de_AT.UTF-8 LC_NUMERIC=C[3]LC_TIME=de_AT.UTF-8 LC_COLLATE=de_AT.UTF-8[5]LC_MONETARY=de_AT.UTF-8 LC_MESSAGES=de_AT.UTF-8[7]LC_PAPER=de_AT.UTF-8 LC_NAME=C[9]LC_ADDRESS=C LC_TELEPHONE=C[11]LC_MEASUREMENT=de_AT.UTF-8 LC_IDENTIFICATION=C,它可以工作。但我不确定。
   png(type="cairo-png");plot(1, xlab="\u0298");dev.off()