0

我有以下数据:

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 中正确打开它?
4

2 回答 2

1

我怀疑文本实际上编码为 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().

于 2020-12-09T21:10:40.067 回答
1

有些事情很奇怪,因为您的输入在文本前显示了一个双引号,而在 tibble 中显示字符列的内容时通常不会发生这种情况。紧跟在“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(),您可能用来复制内容的方法不会保留问题...

于 2020-12-11T19:18:49.883 回答