gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:19:31 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com