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

2024-02-22

有这种奇怪的行为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正在改变编码,因为stringr是一个包装器stringi包,以及stringi始终以 UTF-8 进行编码。看help("stringi-encoding", package = "stringi")了解此设计选择的详细信息和解释。

避免合并时出现问题data.tables,只需确保所有id变量以 UTF-8 编码。你可以使用stri_enc_toutf8 in the stringi包,或使用iconv.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 stringr 在操作字符串时要改变编码? 的相关文章

随机推荐

  • VSTS 发布拉取请求构建触发器

    我的团队正在使用 VSTS 构建和发布机制 结合拉取请求分支安全设置 以便只有在拉取请求完成后才能合并代码 不过 我们遇到了一些奇怪的事情 因为当创建拉取请求 并且生成构建来证明提交 时 由拉取请求触发的此构建的完成也会间接触发发布 因为我
  • 检测 Silverlight 中的 DataContext 更改

    我有一个由多个部分组成的问题 1 Silverlight 不公开 DataContextChanged 事件是否有充分的理由 如果微软的某个人做出改变 似乎可以避免很多麻烦internal to public在 FrameworkEleme
  • C++ 右值引用和移动语义

    C 03 存在可能隐式发生不必要的副本的问题 为此 C 11引入了rvalue references and move semantics 现在我的问题是 这种不必要的复制问题是否也存在于 C 和 java 等语言中 或者只是 C 的问题
  • 当测试用例通过或失败时发送电子邮件警报

    我想在测试执行结果通过或失败或在测试管理器上执行时的任何其他状态时向用户发送电子邮件警报 我知道测试管理器无法做到这一点 但 TFS 可以 我已经尝试了各种查询组合来设置相同的警报 我想为自动化测试用例执行此操作 我将创建的构建不会发生太大
  • 打开 RewriteEngine 会产生 403 错误——如何打开 FollowSymLinks?

    我正在 OSX 上使用内置的 Apache2 我将文档根目录移动到桌面上的一个文件夹中 并确保 www and everyone具有读取权限 它工作得很好 很棒 PHP 工作 一切工作正常 直到我添加一个 htaccess仅此行 Rewri
  • 将简单的 JSON 对象转换为属性文件

    我有一个简单的 JSON 对象 想将其转换为 bash 中的属性文件 Input foo bar abc def ghi 预期输出 foo bar abc def ghi 您可以使用to entries为了那个原因 jq r to entr
  • 在 C++ 中捕获 Python 异常

    我正在开发一个服务器 客户端应用程序 其中客户端调用服务器的 API 该 API 为用户输入提供 Python 接口 这意味着客户端接口和服务器接口是用Python编写的 而套接字代码是用C 编写的 在服务器端 我有一堂课 Test 在 C
  • 检查数组是否为空似乎不起作用

    简单数组和简单检查是否是数组或对象 但是当没有数组数据而不是显示时页面崩溃No 这是数组 url get curl content tx https example com arr json decode url true if is ar
  • 显示/隐藏 ImageView 可见性时 Android 应用程序崩溃

    我一直在尝试创建我的第一个 Android 应用程序 是的 遇到了应用程序崩溃 我的片段 主 中有两个 ImageView 在相对布局中将 imageview 1 与 imageview2 重叠 我想做的是 如果有互联网连接 应该会显示 i
  • 电子 v10.1.1 给出未捕获的类型错误:无法读取未定义的属性“对话框”,但相同的代码可以在电子 v9.3.0 中使用

    I am trying to upload a file in an electron app which works perfectly for electron v9 3 0 but as soon as I use electron
  • Swift 使用 NSFetchedResultsController 和 UISearchBarDelegate

    我正在寻找解决这个问题的好方法 我想在我拥有的 TableView 上实现一些简单的搜索功能 我发现的所有示例都使用已弃用的UISearchDisplayController或使用新的UISearchController但没有NSFetch
  • 如何在mongo中高效地通过查询删除文档?

    我有一个查询 它选择要删除的文档 现在 我手动删除它们 如下所示 使用 python for id in mycoll find query fields mycoll remove id 这似乎效率不高 有没有更好的办法 EDIT 好吧
  • 从不同路径访问 PHP 会话变量

    我在 PHP 会话中遇到一个非常奇怪的问题 事实如下 创建会话变量代码 mydomain a b c create session php 读取会话变量 read mydomain a b c read session php 问题 当我从
  • PHP - 设置/模拟假日期

    我有一个有点奇怪的问题 是否可以在 PHP 中设置脚本运行时间的假日期 我使用的API使用时间段 例如当您发送请求获取一些数据时 您可以指定时间段 例如一个月 但这些时间段是固定的 它会返回从request time 1month到requ
  • C#中空字符串的sizeof

    在Java中 一个空字符串是40个字节 在Python 中它是20 个字节 C 中的空字符串对象有多大 我不能做sizeof 而且我不知道还能怎样找到答案 谢谢 是18字节 http www codeproject com KB dotne
  • 通过模型方法上的装饰器发出 Django 信号?

    我正在尝试做类似的事情这些建议的信号装饰器 http code djangoproject com ticket 9015 除了拥有一个将装饰方法连接到信号的装饰器 将信号的发送者作为装饰器的参数 之外 我还想在类方法上使用装饰器 我想像这
  • 图层暂停时更新 CALayer 位置是否存在问题?

    在暂停时阅读演示位置是否存在问题 我正在尝试暂停并恢复CALayer 一旦CALayer已暂停 我想用其当前的呈现位置更新图层的位置 当我尝试执行此操作时 一旦恢复图层 图层就会轻微闪烁 这是我用来暂停和恢复的代码CALayer 基于技术问
  • 如何在整个文件中进行列选择?

    Is there a way I can use the middle click or maybe Ctrl Alt Up to a particular column across all lines in a long file Cu
  • WCF 数据服务 (OData)、SetEntitySetPageSize 和自定义操作的问题

    我有一个WCF数据服务具有名为的自定义操作MostRecentFilms返回源中最新的 10 部电影 每部电影都有一个Year财产 默认设置一切正常 但是当我设置实体集的页面大小时 config SetEntitySetPageSize 1
  • 为什么 stringr 在操作字符串时要改变编码?

    有这种奇怪的行为stringr 这真让我烦恼 stringr在没有警告的情况下更改某些包含外来字符的字符串的编码 在我的例子中是 和其他一些 如果您str trim字符向量 那么那些带有外来字母的字符将被转换为新的编码 letter1 lt