在R中丢失Č,č字符,UTF编码

时间:2014-12-29 13:41:50

标签: r

我有这个字符串:"Časové rozlíšenie súčet"

我想将字符串存储到csv文件(或其他)中,以便稍后可以使用它来重写数据帧中的列名。

每次我都使用write.csv(...., encoding="UTF-8)或任何其他方法:

"Casové rozlíšenie súcet"  # so it loses the Č or č, all other letters are fine.

我使用x <- fromJSON进行报废。只要我将废弃的字符串放入data.frame(x)c(x),我就会松开Č or č,为什么会发生这种情况?

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252         LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C                            LC_TIME=English_United Kingdom.1252   

编辑:

在我的Rstudio控制台中:

x <- c("Časové rozlíšenie súčet")
data.frame(x)

                          x
1    Casové rozlíšenie súcet

1 个答案:

答案 0 :(得分:1)

您正在使用的编码 - Windows-1252 - 不包含带重音的“c”字母。

不幸的是,在Windows上对R的编码支持相当缺乏。如果Sys.setlocale 1 不起作用,则唯一的办法可能是raw - 对字符串进行编码并从那里转换它:

# Časové …
x = list(as.raw(c(0xC4, 0x8C, 0x61, 0x73, 0x6F, 0x76, 0xC3, 0xA9))) # , …
result = iconv(x, from = 'UTF-8')

you need to look up the UTF-8 encoding sequence for every character以来,这显然是颈部疼痛。更好的方法是从文件中读取数据 raw 并从那里转换它。

我不知道如何将其与fromJSON结合使用。您可以尝试在encoding = 'UTF-8'的调用中指定fromJSON。但是,我怀疑它会起作用。


1 试试这些:

Sys.setlocale(locale = 'en_GB.UTF-8')
Sys.setlocale(locale = 'UTF-8')
Sys.setlocale(locale = 'CP65001')

不幸的是,我不知道Windows下R的语言环境支持状态,所以这可能不起作用。