在 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 &amp;&amp; rake db:create &amp;&amp; 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吗?

如何在 Windows 上使用不属于 UTF-8 的字符创建文件名?

`seek` 在现代 Windows 上可靠吗?

Windows 控制台上的 UTF-8 输出