Problemas com cadeias com caracteres Unicode <U + 0092>

Eu tenho um conjunto de dados muito grande (70k linhas, 2600 colunas, formato CSV) que criei por raspagem da web. Infelizmente, durante o pré-processamento, processamento etc., em algum momento, alguns caracteres problemáticos foram codificados de uma maneira estranha e eu tenho problemas para lidar com eles.

Eu tenho seqüências de caracteres como as seguintes:

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

Procurando o código, podemos ver que deve ser o personagem, que realmente deve ser' (os dados são gerados pelo usuário, portanto, podem conter todos os tipos de caracteres ímpares). Embora, ao procurar esse personagem, pareça que outros também tenham problemas com ele (1, 2, 3) Ele é rotulado como um personagem de controle, sem ter certeza do que é isso, mas talvez seja por isso que seja tão difícil de lidar.

A maioria das outras perguntas sobre Unicode no R se refere ao Unicode no formato como este\u0092.

Apenas useEncoding()

Vamos tentar:

#> 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"

Portanto, isso parece não fazer nada.

Use as funções de hack das perguntas anteriores

Existem algumas perguntas anteriores que dizem respeito a esse formato Unicode e tentam convertê-las:

Exibir unicode em RO gsub no R com substituição unicode fornece resultados diferentes no Windows em comparação com o Unix?

Estranhamente, o exemplo que eles dão trabalho, mas o meu não.

#> 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."

Mas:

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

Então, ele conseguiu converter para o\u formato do <U+....> formato e usandocat() imprime o caractere sem esse símbolo (ou um símbolo com bug no SO).

Basta pesquisar e substituí-los manualmente

Eu tenho apenas um número limitado desses problemas, então talvez eu pudesse usar a pesquisa-substituição para resolvê-lo. Contudo:

#> #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"

Portanto, a substituição não parece funcionar, mas funciona no\u versões:

#> #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"

Então, isso sugere um método de trabalho: 1) converter<U+> formato para\u no formato e use a pesquisa-substituição.

Desescapar comstringi::stri_unescape_unicode()

Não parece funcionar com nenhuma das versões:

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

Existe alguma maneira geralmente aplicável de lidar com problemas como este?

Minha configuração

Minha sessionInfo é:

> 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

Executando R via RStudio (0.99.893, visualização) no Windows 8.1, 64 bits. O teclado e as unidades de tempo são dinamarquesas, mas todo o resto está em inglês.

questionAnswers(1)

yourAnswerToTheQuestion