我一直在使用 googlesheets
包从网页表上传和下载数据。此前,它一直在下载带有图标 � 的非 ASCII 符号的字符串。现在,没有任何明显的原因,它已开始使用以下字符串下载它们:�
。如何将 �
转换为菱形问号 (�)?
最佳答案
您可能遇到编码问题。我怀疑原始数据是用 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
将具有“未知”编码,在 Linux 和 MacOS 上被解释为“UTF-8”,但在 Windows 上则不然。
Windows 用户
如果您使用的是 Windows,那么修复可能会简单得多。如果您的数据有"unknown"
编码,那么在 MacOS 和 Linux 上它将(正确地)被解释为 UTF-8,但在 Windows 上它将使用您的 native 编码(通常是 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 �"
关于r - 将 `�` 字符串转换为 R 中的菱形问号符号 (�),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268942/