在Windows上使用UTF-8进行R软件包开发

7

我在一个非英语国家。我们需要使用本地语言来开发我们的代码。

我正在尝试开发一个包,但遇到了编码问题。该包基本上只是一种让我组织我的代码的方式。这意味着它包含用于列名和数据值的魔法字符串,例如:

data %>% select("Åsen", Region) %>% filter(Region == "Åholt")

这段代码被包装在我的软件包中定义的函数中。当我尝试运行它时,Å会被转换为一些奇怪的字符,导致它失败,因为没有包含这些奇怪字符的列或数据。

我的所有源代码文件都使用UTF-8编码。

使用英语开发不是一个选项。

我在我的软件包DESCRIPTION文件中设置了以下内容:

Depends: R (>= 3.30)
Encoding: UTF-8

编辑:

在我调用我的包的主要脚本的顶部使用 options(encoding = "UTF-8") 似乎可以解决我的包代码中存在非ASCII字符的问题。

了解更多的人能否阐明一下这个问题?


1
sessionInfo() 报告了什么? - hrbrmstr
1
有很多的软件包和丹麦丹麦语.1252的区域设置。但我尝试设置选项(encoding = "UTF-8"),似乎可以解决问题。显然,即使是在UTF8编码的文件中编写的魔术字符串也会被转换为Latin1/cp1252。例如,Encoding("Åsen")返回Latin1。 - CodeMonkey
我还使用PoEdit并结合gettext和sprintf创建了法语翻译字符串。 - Cedric
@Cedric我不确定那是否真的是一个解决方案。在每个字符串中包装enc2utf8或类似的操作难道不会很烦吗? - CodeMonkey
但也许有更好的解决方案。我已将您的问题标记为收藏,看看会出现什么。 - Cedric
显示剩余3条评论
2个回答

0

有关使用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: Rails 和 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文件中添加以下代码行:encoding: utf8


0

我花了很多时间在那上面。

我在Linux上使用它,是最好的选择。

options(encoding = "UTF-8")

在编程中,我使用iconv()函数来处理数据库(SQL Server)中的数据:

sqlQuery(connexion_bdd,
    iconv(        
     "select * from mytable " ,
     "UTF-8","ISO88591")  , 
      stringsAsFactors=FALSE     
)

还有"工具->全局选项->代码->保存并放置UTF-8"。

对于ms Windows,如果您不想更改IDE中的默认代码页,则可以在我的句子中将UTF-8替换为windows-1252。(1252是我在ms Windows中拉丁字母的代码页)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接