由于文本字符串有问题,无法打开导出的 Excel 文件
Can't open exported Excel file due to problematic text string
我有以下数据:
structure(list(QB5B_2 = structure("Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas d'accord entre elles sur la stratégie à adopter en ce qui les concerne . Exemple les Gafa payent des impots en Irlande car leurs si<ef>", label = "test", format.spss = "A255", display_width = 0L)), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame"))
当我在 RStudios 视图窗格中查看此数据时,它看起来像正确的法语文本:
View(problem)
显示:
但是,当查看控制台中的数据时,它给了我:
# A tibble: 1 x 1
QB5B_2
<chr>
1 "Car les GAFA sont des soci\xc3\xa9t\xc3\xa9s Am\xc3\xa9ricaines et de plus les gouvernements qui composent l'Union Eu~
很明显存在一些字符编码问题。
现在,当我尝试将文件导出到 Excel 时:
library(writexl)
write_xlsx(problem, "test.xlsx")
它执行导出,但我无法打开 Excel 中的文件,而是收到一条错误消息,指出遇到了问题。旁注:我可以完美地导入 Excel 文件,例如readxl::read_xlsx("test.xlsx")
所以两个问题:
- 首先我该如何预防这些性格问题?理想情况下,我不会在数据中得到这些奇怪的
\xc3\
东西。
- 有什么方法可以导出文件以便在 Excel 中正常打开?
我怀疑文本实际上编码为 latin1,但编码设置为 UTF-8。所以 R 试图读取 latin1,就好像它是 UTF-8 一样,但弄错了。
# by default, R used latin1
> Encoding(problem$QB5B_2)
[1] "latin1"
# in that case, no problem to display it
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui com~
# But the API set it as UTF-8
> Encoding(problem$QB5B_2) <- "UTF-8"
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des soci\xe9t\xe9s Am\xe9ricaines et de plus les gouvernemen~
# You just need to convert the encoding back
> Encoding(problem$QB5B_2) <- "latin1"
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui com~
另请参阅 ?Encoding
中的第一个示例,它非常相似。在法语计算机上,语言环境将设置为 latin1
,您可以使用 enc2native()
.
有些事情很奇怪,因为您的输入在文本前显示了一个双引号,这在小标题中显示 character-column 的内容时通常不会发生。在“1”之后看:
# A tibble: 1 x 1
QB5B_2
<chr>
1 "Car les GAFA sont des soci\xc3\xa9t\xc3\xa9s Am\xc3\xa9ricaines et de plus les gouvernements qui composent l'Union Eu~
也许解决方案是使用 iconv()
:
重新编码变量
problem$QB5B_2 <- iconv(problem$QB5B_2, sub = "byte")
problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas …
另一种方法是删除第一个字符:
problem$QB5B_2 <- str_remove(problem$QB5B_2, pattern = "$.")
problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas …
这并没有说明如何首先避免该问题,但它应该可以解决您的问题。
这里调试的难点是dput()
,你可能用来复制内容不保留的问题...
我有以下数据:
structure(list(QB5B_2 = structure("Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas d'accord entre elles sur la stratégie à adopter en ce qui les concerne . Exemple les Gafa payent des impots en Irlande car leurs si<ef>", label = "test", format.spss = "A255", display_width = 0L)), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame"))
当我在 RStudios 视图窗格中查看此数据时,它看起来像正确的法语文本:
View(problem)
显示:
但是,当查看控制台中的数据时,它给了我:
# A tibble: 1 x 1
QB5B_2
<chr>
1 "Car les GAFA sont des soci\xc3\xa9t\xc3\xa9s Am\xc3\xa9ricaines et de plus les gouvernements qui composent l'Union Eu~
很明显存在一些字符编码问题。
现在,当我尝试将文件导出到 Excel 时:
library(writexl)
write_xlsx(problem, "test.xlsx")
它执行导出,但我无法打开 Excel 中的文件,而是收到一条错误消息,指出遇到了问题。旁注:我可以完美地导入 Excel 文件,例如readxl::read_xlsx("test.xlsx")
所以两个问题:
- 首先我该如何预防这些性格问题?理想情况下,我不会在数据中得到这些奇怪的
\xc3\
东西。 - 有什么方法可以导出文件以便在 Excel 中正常打开?
我怀疑文本实际上编码为 latin1,但编码设置为 UTF-8。所以 R 试图读取 latin1,就好像它是 UTF-8 一样,但弄错了。
# by default, R used latin1
> Encoding(problem$QB5B_2)
[1] "latin1"
# in that case, no problem to display it
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui com~
# But the API set it as UTF-8
> Encoding(problem$QB5B_2) <- "UTF-8"
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des soci\xe9t\xe9s Am\xe9ricaines et de plus les gouvernemen~
# You just need to convert the encoding back
> Encoding(problem$QB5B_2) <- "latin1"
> problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui com~
另请参阅 ?Encoding
中的第一个示例,它非常相似。在法语计算机上,语言环境将设置为 latin1
,您可以使用 enc2native()
.
有些事情很奇怪,因为您的输入在文本前显示了一个双引号,这在小标题中显示 character-column 的内容时通常不会发生。在“1”之后看:
# A tibble: 1 x 1
QB5B_2
<chr>
1 "Car les GAFA sont des soci\xc3\xa9t\xc3\xa9s Am\xc3\xa9ricaines et de plus les gouvernements qui composent l'Union Eu~
也许解决方案是使用 iconv()
:
problem$QB5B_2 <- iconv(problem$QB5B_2, sub = "byte")
problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas …
另一种方法是删除第一个字符:
problem$QB5B_2 <- str_remove(problem$QB5B_2, pattern = "$.")
problem
# A tibble: 1 x 1
QB5B_2
<chr>
1 Car les GAFA sont des sociétés Américaines et de plus les gouvernements qui composent l'Union Européenne ne sont pas …
这并没有说明如何首先避免该问题,但它应该可以解决您的问题。
这里调试的难点是dput()
,你可能用来复制内容不保留的问题...