Отображение содержимого на местном языке : R

Я пытаюсь загрузить данные с веб-сайта, который содержит содержимое как на английском, так и на местном языке (не на английском). Мне удалось получить данные на английском языке, но для содержимого на местном языке я получил примерно следующее. Мой вопрос в том, как мне отобразить оба?

X1  X2  X3
NA      
1   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
2   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
3   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
4   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
5   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
6   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
7   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
8   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
9   <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>
10  <U+0926><U+094B><U+0932><U+0916><U+093E>    <U+0915><U+093E><U+0932><U+093F><U+0928><U+094D><U+091A><U+094B><U+0915>  <U+0917><U+093E><U+0909><U+0901><U+092A><U+093E><U+0932><U+093F><U+0915><U+093E>

person user227710    schedule 28.05.2017    source источник


Ответы (1)


Вероятно, у вас есть нужный текст, просто он отображается неправильно.

Я могу воспроизвести вашу проблему. В данных вашего примера были одни и те же строки 10 раз. Чтобы сохранить разумный дисплей, я повторяю только 3 раза.

## Hex codes from your example
S1 = c("0926", "094B", "0932", "0916", "093E") 
S2 = c("0915", "093E", "0932", "093F", "0928", "094D", "091A", "094B", "0915")  
S3 = c("0917", "093E", "0909", "0901", "092A", "093E", "0932", "093F", "0915", "093E")

## Convert to Devanagari strings
X1 = rep(intToUtf8(strtoi(S1, base=16L)), 3)
X2 = rep(intToUtf8(strtoi(S2, base=16L)), 3)
X3 = rep(intToUtf8(strtoi(S3, base=16L)), 3)

df = data.frame(X1, X2, X3, stringsAsFactors=FALSE)

Теперь X1 будет отображаться правильно, а df — нет.

Как ни странно, df$X1 и df[,1] будут отображать юникод, а df[1, ] - нет.

Обходной путь заключается в том, что as.matrix(df) будет отображать все это как символы Unicode.

По-видимому, это известная ошибка в версии RGui для Windows. Некоторые другие исследования этого можно найти в этом более раннем вопросе SO и этом Сообщение в списке рассылки

Дополнение

Запись этих строк в читаемый файл Unicode требует некоторой осторожности. Это создало файл csv для моего примера.

Mat = as.matrix(df)
F <- file("Test1.csv", "wb", encoding="UTF-8")
BOM <- charToRaw('\xEF\xBB\xBF')
writeBin(BOM, F)
for(r in 1:nrow(Mat)) {
    Line = paste(Mat[r,], collapse=",")
    writeLines(Line, F, useBytes=T) 
}
close(F)
person G5W    schedule 03.06.2017
comment
Большое спасибо за ответ. Любая идея, как сохранить матрицу, чтобы я мог просматривать символы не только в консоли, но и в сохраненном файле (например, csv)? - person user227710; 03.06.2017
comment
Слишком сложно для комментариев. Добавление к ответу. - person G5W; 03.06.2017