У меня есть следующие данные:
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\ вещи в данных.Хороший вопрос. Я собираю свои данные через API, но я думаю, что по умолчанию будет кодировка UTF-8, да. Но я всегда думал, что UTF-8 - это что-то. хорошо и должно обрабатываться всеми программными инструментами, поэтому я ожидаю, что Excel сможет открывать такие символы?
На самом деле после загрузки данных через API через httr:POST у меня есть следующая строка кода: download_content <- content(download_request, encoding = "UTF-8")
(но если оставить часть «encoding = UTF-8», ничего не изменится в данных (только что попробовал).
Мне кажется, что проблема не в R. Он принимает специальный символ и правильно выполняет кодировку UTF-8 в соответствии с таблицей данных специальных символов. Речь идет о том, как данные экспортируются в Excel. Таким образом, цель не в том, чтобы «избавиться» от странных символов/кодов. Они правильные. Вот почему Excel не принимает его. Я мало что знаю об Excel, но есть ли возможность специально импортировать UTF-8 (если только это не значение по умолчанию)?
При копировании и вставке этого определения structure() на моем компьютере оно правильно отображается в консоли, и я могу сохранить его в Excel, который открывается с правильными акцентами. Это на американской винде. Поэтому я думаю, что проблема в шагах API и R, а не в Excel.
Хорошо, с вашей структурой Encoding(problem$QB5B_2) это latin1, я могу воспроизвести вашу проблему с Encoding(problem$QB5B_2) <- "UTF-8" и решить ее, установив Encoding() <- "latin1". Я подозреваю, что текст на самом деле был Latin1, но API просто притворяется, что это UTF-8 без преобразования.
Кажется, есть проблема с кодировкой Excel и UTF-8. Подробнее см. здесь: stackoverflow.com/questions/6002256/…





Я подозреваю, что текст на самом деле закодирован как 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().
Что-то довольно странное, так как ваш ввод показывает двойную кавычку перед текстом, чего обычно не происходит при отображении содержимого символьного столбца в таблице. Посмотрите сразу после "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(), который вы, вероятно, использовали для репликации контента, не решает проблему...
Невероятно, второе решение, которое вы предоставили, решило проблему для меня. Я до сих пор не уверен, как и где возникла проблема, но я исправил ее, по крайней мере, для этого примера.
\xc3 является частью кодировки символов UTF-8. Установлена ли у вас кодировка при импорте файла
encoding = "UTF-8"? Смотрите здесь.