r - 为什么 stringr 在操作字符串时要改变编码?

标签 r encoding data.table stringr

stringr有这种奇怪的行为,这真的很烦人。 stringr 会在没有警告的情况下更改某些包含外来字符的字符串的编码,在我的例子中是 ø、å、æ、é 和其他一些...如果您 str_trim 一个向量字符,那么那些带有外来字母的字符将被转换为新的编码。

letter1 <- readline('Gimme an ASCII character!')     # try q or a
letter2 <- readline('Gimme an non-ASCII character!') # try ø or é
Letters <- c(letter1, letter2)
Encoding(Letters)           # 'unknown'
Encoding(str_trim(Letters)) # mixed 'unknown' and 'UTF-8'

这是一个问题,因为我使用 data.table 来(快速)合并大表,并且 data.table 不支持混合编码,并且因为我找不到返回统一编码的方法。

有什么解决办法吗?

编辑:我以为我可以回到基本函数,但它们也不保护编码。 paste 会保留它,但 sub 不会。

 Encoding(paste(' ', Letters))                 # 'unknown'
 Encoding(str_c(' ', Letters))                 # mixed
 Encoding(sub('^ +', '', paste(' ', Letters))) # mixed

最佳答案

stringr 正在更改编码,因为 stringrstringi 包的包装器,并且 stringi 始终进行编码以 UTF-8 格式。有关此设计选择的详细信息和说明,请参阅 help("stringi-encoding", package = "stringi")

为避免合并 data.table 时出现问题,只需确保所有 id 变量均采用 UTF-8 编码即可。您可以使用 stringi 包中的 stri_enc_toutf8 或使用 iconv 来完成此操作。

关于r - 为什么 stringr 在操作字符串时要改变编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33482308/

相关文章:

r - 崩溃R包: rearraning or reposition columns in custom order

r - 任何用于优化 R 性能的文档?

Ruby 不兼容的字符编码

java - 如何设置 httpExchange 响应的编码?

r - 使用 data.table 通过多个键进行子集化的奇怪行为

r - 按升序/降序快速对 data.table 进行排序

r - R中向量的子向量总和

r - R Shiny 表格下方的中心表格

Java 字符串 - UTF 和字节表示

r - 返回向量的 data.table 聚合,例如 scale()