【发布时间】:2016-01-29 15:54:47
【问题描述】:
来自?Quotes:
\xnn character with given hex code (1 or 2 hex digits) \unnnn Unicode character with given code (1--4 hex digits)
在 Unicode 字符只有一位或两位数字的情况下,我希望这些字符是相同的。事实上,?Quotes 帮助页面上的示例之一显示:
"\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21"
## [1] "Hello World!"
"\u48\u65\u6c\u6c\u6f\u20\u57\u6f\u72\u6c\u64\u21"
## [1] "Hello World!"
但是,在 Linux 下,当尝试打印井号时,我看到了
cat("\ua3")
## £
cat("\xa3")
## �
即\x 十六进制代码无法正确显示。 (这种行为在我尝试过的任何语言环境中都存在。)在 Windows 7 下,两个版本都显示一个井号。
如果我转换为整数并返回,那么在 Linux 下井号会正确显示。
cat(intToUtf8(utf8ToInt("\xa3")))
## £
顺便说一句,这在 Windows 下不起作用,因为 utf8ToInt("\xa3") 返回 NA。
一些\x 字符在Windows 下返回NA,但在Linux 下抛出错误。例如:
utf8ToInt("\xf0")
## Error in utf8ToInt("\xf0") : invalid UTF-8 string
("\uf0" 是一个有效字符。)
这些示例表明\x 和\u 字符形式之间存在一些差异,这似乎是特定于操作系统的,但我看不出它们是如何定义的任何逻辑。
这两种字符形式有什么区别?
【问题讨论】:
-
那是 C# 但它可能对你有帮助,因为它是同一个问题:stackoverflow.com/questions/32175482/…
-
@etienne 如果简而言之,Richie 本人会给出详细的 wiki 答案,我不会感到惊讶。
-
@DavidArenburg:不,他只是在推特上发了这个问题,所以他一定被难住了。 :)
-
@JoshuaUlrich 是的,完全被难住了。我怀疑这两件事是一样的,而且这些怪癖是错误,但我想在 R-core 咆哮之前我会问你们好人。
-
我认为 charToRaw 会帮助你解决这个问题