R中的Sprintf不计算变音符号

Mat*_*ert 5 printf r diacritics

我有字符向量,我想确保向量的所有元素具有相同的长度.因此我用空格填充短元素,如下所示:

vec <- c("fjdlksa01dada","rau","sjklf")
x <- sprintf("%-15s", vec)
nchar(x)
# returns
[1] 15 15 15
Run Code Online (Sandbox Code Playgroud)

喜欢上一个问题的答案.这很好,但它似乎与变音符号有问题.例如,如果我的矢量看起来像这样:

vec2 <- c("fjdlksa01dada","rauü","sjklf")
y <- sprintf("%-15s", vec)
nchar(y)
# returns
[1] 15 14 15
Run Code Online (Sandbox Code Playgroud)

我在Mac OS X上运行R(10.6).我怎样才能解决这个问题?

编辑:注意,我不打算修复nchar的输出,因为它是正确的.问题是sprintf失去了变形金刚.

编辑:更新R,更改为DWins区域设置 - 完全没有变化.但:

vec2 <- c("fjdlksa01dada","rauü","sjklf")
Encoding(vec2)
# returns
[1] "unknown" "UTF-8"   "unknown"
Run Code Online (Sandbox Code Playgroud)

奇怪.

nic*_*ico 1

可能有一种更干净的方法......但这有效:

sapply(vec, function(x){
      paste(x, paste(rep(" ", 13-nchar(x)), collapse=""), "")
      })
Run Code Online (Sandbox Code Playgroud)

(有关 13 的[非]解释,请参阅下面的评论)