在rApache中运行R时,语言环境是从Apache Web服务器继承的,因此Sys.getlocale()始终等于"C".我想使用我的Web应用程序UTF8,所以我使用:
Sys.setlocale("LC_ALL", 'en_US.UTF-8')
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于没有此区域设置的计算机:
1: Setting LC_CTYPE failed, using "C"
2: Setting LC_COLLATE failed, using "C"
3: Setting LC_TIME failed, using "C"
4: Setting LC_MESSAGES failed, using "C"
5: Setting LC_MONETARY failed, using “C”
Run Code Online (Sandbox Code Playgroud)
有没有办法Sys.setlocale将语言环境设置为系统默认值UTF-8?即在Windows或德语Linux上也可以使用的东西?
我在Windows机器上运行R,它直接链接到PostgreSQL数据库.我没有使用RODBC.我的数据库以UTF-8编码,由以下R命令确认:
dbGetQuery(con, "SHOW CLIENT_ENCODING")
# client_encoding
# 1 UTF8
Run Code Online (Sandbox Code Playgroud)
但是,当一些文本被读入R时,它在R中显示为奇怪的文本.
例如,我的PostgreSQL数据库中显示以下文本:"Stéphane"
出口至R之后它表现为:"STA©PHANE"(该é被编码为é)
导入RI时,使用dbConnect命令建立连接,dbGetQuery使用SQL查询数据的命令.连接到数据库或运行查询时,我没有在任何地方指定任何文本编码.
我在网上搜索过,找不到直接解决我的问题的方法.我找到了这个链接,但他们的问题是RODBC,我没有使用.
此链接有助于识别符号,但我不只是想在R ...中查找和替换太多数据.
我确实尝试在下面运行以下命令,然后发出警告.
Sys.setlocale("LC_ALL", "en_US.UTF-8")
# [1] ""
# Warning message:
# In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
# OS reports request to set locale to "en_US.UTF-8" cannot be honored
Sys.setenv(LANG="en_US.UTF-8")
Sys.setenv(LC_CTYPE="UTF-8")
Run Code Online (Sandbox Code Playgroud)
警告发生在Sys.setlocale("LC_ALL", "en_US.UTF-8")命令上.我的直觉是这是Windows特定的问题,并且在Mac/Linux/Unix中不会发生.
精简版。Iload()数据在一个包中。以前,一个包中的测试通过了,现在它失败了,因为输出sort改变了。这是一个最小的可重现示例 - 有关详细信息,请参见下文:
y <- c("Schaffhausen", "Schwyz", "Seespital", "SRZ")
sort(y)
# OLD 3.5.2 [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
# NEW 4.0.0 [1] "SRZ" "Schaffhausen" "Schwyz" "Seespital"
# Update 4.0.2 see comment:
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
# From jay.sf's comment
sort.int(y, method="radix")
# [1] "SRZ" "Schaffhausen" "Schwyz" "Seespital"
sort.int(y, method="shell")
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
# From Henrik's comment:
data.table::fsort(y)
# [1] "SRZ" "Schaffhausen" "Schwyz" "Seespital"
Run Code Online (Sandbox Code Playgroud)
我发现的唯一相关报告变化是
R 4.0.0
新特性的变化
......
当通过 read.table() 加载数据集时,data() …
(这个问题也是在Github上问这里)
将 R 升级到 4.0.2 后,测试似乎失败了,因为sortin的算法发生了testthat变化。以下内容显示,这base::sort()和browser()是R中4.0.2罚款(见这个问题,为什么增加这个检查。):
y <- c("Schaffhausen", "Schwyz", "Seespital", "SRZ")
print(sort(y))
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
browser()
print(sort(y))
# [1] "Schaffhausen" "Schwyz" "Seespital" "SRZ"
Run Code Online (Sandbox Code Playgroud)
但是如果你创建一个包,调用它testsort,使用添加测试环境usethis::use_testthat()并在其中添加一个文件“test-sort.R”/testsort/tests/testthat/
test_that("test sort", {
xx <- c("Schaffhausen", "Schwyz", "Seespital", "SRZ")
print("")
# bowser()
print(sort(xx))
expect_equal(sort(xx), c("Schaffhausen", "Schwyz", "Seespital", "SRZ"))
})
Run Code Online (Sandbox Code Playgroud)
你得到
==> devtools::test()
Loading testsort
Testing testsort
v | OK F W S | Context
/ …Run Code Online (Sandbox Code Playgroud) 我有一个像
a <- 1
# A very long comment, perhaps copy paste from somewhere containing the word ?t.
Run Code Online (Sandbox Code Playgroud)
我想搜索非 UTF-8 编码。我怎样才能在 RStudio 中做到这一点?
我正在尝试读取csv由 Sql Server Management Studio 生成的文件,并UTF-8 通过. 我无法让 R 正确显示特殊字符。Rread.csv2()
如果我将fileEncoding="UTF-8-BOM"导入停止在有 \xc3\xbf 的行。但是,打开 \xc3\xbf 中的文件时,Notepad++可以使用编码正确显示UTF-8。我尝试过不进行设置fileEncoding,但是特殊字符无法正确显示(当然)。
csv 文件可在此处获取:\n https://www.dropbox.com/s/7y47i826ikq8ahi/Data.csv
\n如何读取 csv 文件并以正确的编码显示文本?
\n谢谢!!
\nr ×5
utf-8 ×2
encoding ×1
locale ×1
postgresql ×1
rapache ×1
rpostgresql ×1
rstudio ×1
sorting ×1
testthat ×1