如何与以默认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)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows 10 x64 (build 18362)
#
# Matrix products: default
#
# locale:
# [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
# [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
# [5] LC_TIME=English_United States.1252
#
# attached base packages:
# [1] stats graphics grDevices utils datasets methods base
#
# loaded via a namespace (and not attached):
# [1] compiler_3.6.1 tools_3.6.1 Rcpp_1.0.2 packrat_0.5.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |