在包的函数中使用非ASCII字符

20

我正在尝试编写一个函数,相当于 scales::dollar,它将英镑符号(£)添加到数字的开头。由于scales代码非常强大,我已经将其用作框架,只需将$替换为£即可。

以下是简化后的函数示例:

pounds<-function(x) paste0("£",x)

当我运行CHECK时,我得到以下信息:

Found the following file with non-ASCII characters:
  pounds.R
Portable packages must use only ASCII characters in their R code,
except perhaps in comments.
Use \uxxxx escapes for other characters.

查看 编写 R 扩展 指南,它在解决这个问题方面没有提供太多帮助(在我看来)。它提到了 \uxxxx,并表示它是 Unicode 字符。

查找 Unicode 字符时,我找到了代码 &#163,但是关于 \uxxxx 的指导很少,只与 W3schools 上的 Java 相关。

我的问题是:

如何使用 \uxxxx 转义实现在 R 函数中使用非 Unicode 字符,并且在函数使用后该字符的显示会受到什么影响?


请参考以下几乎相同的问题:https://dev59.com/VGgu5IYBdhLWcg3wRlBh - Andrie
感谢@Andrie - 不确定为什么第一次搜索时我没有找到它。Karsten提供了有关如何确定Unicode应该是什么的有价值信息 - 否则我建议将其标记为重复。 - Steph Locke
由于这个问题已经有了答案,我们不能将其关闭为重复。有一个合并类似问题的过程,但我没有时间去做这件事。对我来说,问题之间的链接已经足够好了。如果有人想发起合并,那也可以。 - Andrie
3个回答

29

对于 \uxxxx 转义符,您需要知道字符的十六进制数。您可以使用 charToRaw 来确定它:

sprintf("%X", as.integer(charToRaw("£")))
[1] "A3"

现在您可以使用此方法来指定非ASCII字符。 \u00A3£表示相同的字符。

另一个选项是使用stringi::stri_escape_unicode

library(stringi)
stringi::stri_escape_unicode("➛")
# "\\u279b"

这告诉您 "\u279b" 代表字符 "➛"


这会给出 sprintf("%X", as.integer(charToRaw("➛"))) # "E2" "9E" "9B 作为 的结果。那么接下来该怎么做呢? - Erdogan CEVHER
不知道为什么 rawToChar 在你的例子中不起作用。 - Karsten W.

11

试试这个:

pounds<-function(x) paste0("\u00A3",x)

7

stringi包在以下情况下很有用:

library(stringi)

stri_escape_unicode("£")
#> [1] "\\u00a3"

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