Impressão de caracteres UTF-8 em R, Rmd, knitr, bookdown
ATUALIZAÇÃO (abril de 2018):
O problema ainda persiste, sob diferentes configurações e computadores. Acredito que esteja relacionado a todos os caracteres UNICODE, UTF-8.
PROBLEMA:
Meu arquivo Rmd / R é salvo com a codificação UTF-8. De outrossessionInfo()
detalhes:
Platform: x86_64-w64-mingw32/x64 (64-bit)
LC_CTYPE=English_Canada.1252
other attached packages:
[1] knitr_1.17
Aqui está um quadro de dados simples que preciso imprimir como uma tabela em um documento html, por exemplo comkable(dt)
ou de qualquer outra maneira.
dt <- data.frame(
name=c("Борис Немцов","Martin Luter King"),
year=c("2015","1968")
)
Nenhum dos seguintes trabalhos:
Caminho 1Se eu mantiver Sys.setlocale () como está (ou seja,"English_Canada.1252"
), então recebo o seguinte:
> dt;
name year
1 <U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> 2015
2 Martin Luter King 1968
> kable(dt)
|name |year |
|:-----------------------------------------------------------------------------------------|:----|
|<U+0411><U+043E><U+0440><U+0438><U+0441> <U+041D><U+0435><U+043C><U+0446><U+043E><U+0432> |2015 |
|Martin Luter King |1968 |
Observe que<U+....>
são impressos em vez de caracteres.
Usandodt$name <- enc2utf8(as.character(dt$name))
não ajudou.
Se eu mudarSys.setlocale("LC_CTYPE", "russian")
# "Russian_Russia.1251" `, entendi o seguinte:
> dt;
name year
1 Áîðèñ Íåìöîâ 2015
2 Martin Luter King 1968
> kable(dt)
|name |year |
|:-----------------|:----|
|Áîðèñ Íåìöîâ |2015 |
|Martin Luter King |1968 |
Observe que os caracteres se tornaram sem sentido.
Usandoprint(dt,encoding="windows-1251"); print(dt,encoding="UTF-8")
não teve efeito.
Algum conselho?
O mais próximo que pude encontrar para solucionar esse problema está nos links a seguir, mas eles não ajudaram:http://blog.rolffredheim.com/2013/01/r-and-foreign-characters.html, https://tomizonor.wordpress.com/2013/04/17/file-utf8-windows, https://www.smashingmagazine.com/2012/06/all-about-unicode-utf8-character-sets
Também tentei salvar meu arquivo com a codificação 1251 (em vez da atual UTF-8) e alguns outros pacotes de conversão / processamento de caracteres. Nada ajudou ainda.
ATUALIZAR:
Pergunta relacionada aberta:Como alterar o Sys.setlocale, quando você recebe o erro "solicitação para definir a localidade ... não pode ser respeitada"