在R中将`�`字符串转换为菱形问号( )

时间:2018-01-15 18:41:44

标签: r google-sheets-api

我一直在使用googlesheets包来上传和下载网页表中的数据。以前,它一直在使用带有图标 的非ASCII符号下载字符串。现在,由于没有明显的原因,它已经开始使用以下字符串下载它们:�。如何将�转换为菱形问号( )?

1 个答案:

答案 0 :(得分:1)

您可能遇到编码问题。我怀疑原始数据是用UTF-8编码的,但在某些时候它被视为Windows-1252。

当编码被错误地标记为Windows-1252,然后转换为UTF-8时会发生这种情况:

x <- "Here is a raw string: � is getting converted to �"
(y <- iconv(x, "WINDOWS-1252", "UTF-8"))
#> [1] "Here is a raw string: � is getting converted to �"

您可以通过从UTF-8转换为Windows-1252,然后将结果标记为UTF-8来修复编码错误:

z <- iconv(y, "UTF-8", "WINDOWS-1252")
Encoding(z) <- "UTF-8"
print(z)
#> [1] "Here is a raw string: � is getting converted to �"

注意:如果省略Encoding(z) <- "UTF-8"行,代码仍可在MacOS和Linux上运行,但在Windows上会中断。如果你遗漏那条线,那么z将会有&#34;未知&#34;编码,被解释为&#34; UTF-8&#34;在Linux和MacOS上,但不在Windows上。

Windows用户

如果你正在使用Windows,那么修复可能会简单得多。如果您的数据具有"unknown"编码,那么在MacOS和Linux上它将(正确地)解释为UTF-8,但在Windows上它将使用您的本机编码解释,通常是Windows-1252。如果您使用的是Windows,则会发生类似以下情况:

x <- "Here is a raw string: � is getting converted to �"
y <- x
Encoding(y) <- "unknown"
print(y)
#> [1] "Here is a raw string: � is getting converted to �"

您可以按照以下方式解决此问题:

z <- y
Encoding(z) <- "UTF-8"
print(z)
#> [1] "Here is a raw string: � is getting converted to �"