在 Windows 上使用 UTF-8 开发 R 包
Posted
技术标签:
【中文标题】在 Windows 上使用 UTF-8 开发 R 包【英文标题】:R package development using UTF-8 on Windows 【发布时间】:2018-06-03 00:35:09 【问题描述】:我在一个非英语国家。我们需要能够在代码中使用我们的本地语言进行开发。
我正在尝试开发一个包,但遇到了编码问题。这个包基本上只是我组织代码的一种方式。这意味着它包含列名和数据值的魔术字符串,例如:
data %>% select("Åsen", Region) %>% filter(Region == "Åholt")
包裹在我的包中定义的函数中的这段代码将在我尝试运行它时失败,Å
被转换为一些奇怪的字符,导致它失败,因为没有包含所述奇怪字符的列或数据。
我所有的源代码文件都使用 UTF-8 编码。
用英语发展不是一种选择。
我的包说明文件中有以下设置:
Depends: R (>= 3.30)
Encoding: UTF-8
编辑:
在调用包的主脚本顶部使用 options(encoding = "UTF-8")
似乎可以解决包代码中包含非 ascii 字符的问题。
了解更多的人可以对此有所了解吗?
【问题讨论】:
sessionInfo()
报告什么?
丹麦_丹麦.1252 的许多软件包和语言环境。但我只是尝试设置选项(编码=“UTF-8”),这似乎使它工作。显然,魔术字符串,即使是写在 UTF8 编码文件中的字符串也会被翻译成 latin1/cp1252。 Like Encoding("Åsen") 返回 Latin1
我所做的是保留我的语言环境(法语),但在创建数据或在代码中使用字符串时将字符串转换为 UTF8。
我还在使用 PoEdit 使用 gettext 和 sprintf 创建法语翻译字符串。
@Cedric 我不确定这是否真的是一个解决方案。将每个字符串都包装在 enc2utf8 或类似文件中不是很烦人吗?
【参考方案1】:
我对带有 UTF-8 的 R 的随机注释,尤其是与 mysql/MariaDB 一起使用时:
R/RStudio
Tool -> Global Options -> Code -> Saving and put UTF-8
rs <- dbSendQuery(con, 'set character set "utf8"')
rs <- dbSendQuery(con, 'SET NAMES utf8')
导轨:Rails and utf8mb4
Ruby on Rails:
"\xD0\x9A\xD0\xB0\xD1\x81\xD0\xBB".force_encoding("UTF-8") => "Щасл"
注意rake db:reset
。相反,请考虑 rake db:drop && rake db:create && rake db:migrate
。重置刚刚从具有错误字符集和排序规则的已存储模式中创建了表。但是从迁移中重新创建它们会使用新的字符集和排序规则创建它们。
RoR:application_controller.rb
def configure_charsets
response.headers["Content-Type"] = "text/html; charset=utf-8"
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
end
end
使用以下代码行编码编辑您的 database.yml:utf8
【讨论】:
【参考方案2】:我花了很多时间。
我在 Linux 上使用的那个
options(encoding = "UTF-8")
和iconv()
在我的情况下用于数据库(SQL 服务器):
sqlQuery(connexion_bdd,
iconv(
"select * from mytable " ,
"UTF-8","ISO88591") ,
stringsAsFactors=FALSE
)
还有“工具 -> 全局选项 -> 代码 -> 保存并放置 UTF-8”。
对于 ms Windows,如果您不想更改 IDE 中的默认代码页,可以将我的句子中的 UTF-8
替换为 windows-1252
。 (1252 是我的 ms Windows 中拉丁字母的代码页)
【讨论】:
以上是关于在 Windows 上使用 UTF-8 开发 R 包的主要内容,如果未能解决你的问题,请参考以下文章
使用 RPostgreSQL 进行 UTF-8 / Unicode 文本编码
使用啥 IDE 在 Windows 上使用 Ruby on Rails 进行开发? [复制]
std :: cout可以在Windows上使用UTF-8吗?