2017-05-28 50 views
3

我试图从包含英语和当地语言(非英语)内容的网站下载数据。我能够获得英文数据,但对于使用本地语言的内容,我得到了如下所示的内容。我的问题是如何显示两者?以当地语言显示内容: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> 

回答

4

您可能有您想要的文本,它只是显示不正确。

我可以重现您的问题。您的示例数据具有相同的字符串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$X1df[,1]将显示Unicode, 但df[1, ]不会。

一种解决方法是,as.matrix(df)将显示整个事情 为Unicode字符。

这显然是在Windows版本的RGUI的一个已知的bug。 这样的一些其他的探索可以在这个 Earlier SO Question 发现这Mailing List Post

附录

写这些字符串为可读的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) 
+0

非常感谢您的回答。任何想法如何保存矩阵,以便我不仅可以在控制台中查看角色,还可以在保存的文件(例如csv)中查看角色? – user227710

+1

太复杂的评论。加入回答。 – G5W