Проблема со строками с <U + 0092> символами Юникода

У меня есть очень большой набор данных (70 тыс. Строк, 2600 столбцов, формат CSV), который я создал посредством веб-очистки. К сожалению, делая предварительную обработку, обработку и т. Д. В какой-то момент некоторые проблемные символы стали закодированы странным образом, и у меня возникли проблемы с ними.

У меня есть строки, подобные следующим:

x = "but it doesn<U+0092>t matter"

Поиск кодамы видим, что это должен быть персонажчто на самом деле должно быть' (данные генерируются пользователем, поэтому могут содержать все виды нечетных символов). Хотя, глядя на этого персонажа, кажется, что у других тоже есть проблемы с ним (1, 2, 3). Он помечен управляющим персонажем, не уверен, что это такое, но, возможно, именно поэтому с ним так трудно иметь дело.

Большинство других вопросов о Unicode в R касаются Unicode в таком формате\u0092.

Просто используйтеEncoding()

Давай попробуем:

#> x = "but it doesn<U+0092>t matter"
#> Encoding(x)
#[1] "unknown"
#> Encoding(x) = "UTF-8"
#> Encoding(x)
#[1] "unknown"
#> x
#[1] "but it doesn<U+0092>t matter"

Так что это, похоже, ничего не делает.

Используйте функции взлома из этих предыдущих вопросов

Есть несколько предыдущих вопросов, которые касаются этого формата Unicode и пытаются конвертировать их:

Показать юникод в Rgsub в R с заменой юникода дают разные результаты под Windows по сравнению с Unix?

Как ни странно, пример, который они дают, работает, а мой нет.

#> test.string <- "This is a <U+03B1> <U+03B2> <U+03B2> <U+03B3> test <U+03B4> string."
#> Encoding(test.string)
#[1] "unknown"
#> to_true_unicode(test.string)
#[1] "This is a α β β γ test δ string."

Но:

#> x2 = to_true_unicode(x)
#> x2
#[1] "but it doesn\u0092t matter"
#> cat(x2)
#but it doesnt matter
#> Encoding(x2)
#[1] "UTF-8"

Итак, удалось преобразовать в\u формат из <U+....> формат и использованиеcat() печатает символ без этого символа (или символ ошибки на SO).

Просто найдите и замените их вручную

У меня есть только ограниченное количество этих проблем, поэтому я мог бы просто использовать поиск-замену для их решения. Тем не мение:

#> #base-r
#> gsub(x = x, pattern = "<U+0092>", replacement = "'")
#[1] "but it doesn<U+0092>t matter"
#> #stringr/stringi
#> library(stringr)
#> str_replace(x, pattern = "<U+0092>", "'")
#[1] "but it doesn<U+0092>t matter"

Таким образом, замена, кажется, не работает, но она работает на\u версии:

#> #base-r
#> gsub(x = x2, pattern = "\u0092", replacement = "'")
#[1] "but it doesn't matter"
#> #stringr/stringi
#> library(stringr)
#> str_replace(x2, pattern = "\u0092", "'")
#[1] "but it doesn't matter"

Итак, это предлагает рабочий метод: 1) конвертировать<U+> отформатировать в\u формат, затем используйте поиск-замену.

Unescape сstringi::stri_unescape_unicode()

Кажется, не работает ни с одной из версий:

#> stringi::stri_unescape_unicode(x)
#[1] "but it doesn<U+0092>t matter"
#> stringi::stri_unescape_unicode(x2)
#[1] "but it doesn\u0092t matter"

Есть ли какой-нибудь общепринятый способ решения таких проблем?

Моя настройка

Моя сессияInfo:

> sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=Danish_Denmark.1252  LC_CTYPE=Danish_Denmark.1252    LC_MONETARY=Danish_Denmark.1252
[4] LC_NUMERIC=C                    LC_TIME=Danish_Denmark.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] stringr_1.0.0

loaded via a namespace (and not attached):
[1] magrittr_1.5  tools_3.2.3   stringi_1.0-1

Запуск R через RStudio (0.99.893, предварительный просмотр) в Windows 8.1, 64-разрядная версия. Клавиатура и единицы времени датские, но все остальное на английском.

Ответы на вопрос(1)

Ваш ответ на вопрос