小编kna*_*ply的帖子

Rcpp :: String保留UTF-8编码,但std :: string不

如何与以默认std::vector<std::string>方式相同的方式与构建字符串向量的代码进行交互并保持UTF-8编码Rcpp::String

我有一个std::vector<std::string>UTF-8字符串,希望能够wrap()s按预期返回R. Rcpp ,返回一个字符向量,但是它似乎删除了UTF-8编码(在Windows上)。我假设这是由R的基础字符串行为引起的,但是如果Rcpp::CharacterVector使用Rcpp::Strings 构建了an ,则该行为是正确的。

这是使用std::vector<std::string>... 的示例

#include <Rcpp.h>

// [[Rcpp::export]]
std::vector<std::string> cpp_foo() {
  std::string let1("?");
  std::string let2("?");

  std::vector<std::string> out;
  out.push_back(let1);
  out.push_back(let2);

  return out;
}
Run Code Online (Sandbox Code Playgroud)

弄乱了琴弦。

cpp_foo()
# [1] "Ù\u0081" "Ø®"
Run Code Online (Sandbox Code Playgroud)

这是使用Rcpp::String... 的预期行为的示例

#include <Rcpp.h>

// [[Rcpp::export]]
Rcpp::CharacterVector rcpp_foo() {
  Rcpp::String let1("?");
  Rcpp::String let2("?");

  Rcpp::CharacterVector out;
  out.push_back(let1);
  out.push_back(let2);

  return out;
}
Run Code Online (Sandbox Code Playgroud)

...保留字符串。

rcpp_foo()
# [1] "?" "?"
Run Code Online (Sandbox Code Playgroud)
sessionInfo()
# R version 3.6.1 (2019-07-05) …
Run Code Online (Sandbox Code Playgroud)

r rcpp

7
推荐指数
0
解决办法
63
查看次数

标签 统计

r ×1

rcpp ×1