【问题标题】:How to read csv data with unknown encoding in R如何在R中读取具有未知编码的csv数据
【发布时间】:2013-05-16 22:00:49
【问题描述】:

我有一个.csv 数据,我可以从网页上查看它,但是当我将它读入R 时,某些数据无法显示。数据可在此处获得home.ustc.edu.cn/~lanrr/data.csv

mydata = read.csv("http://home.ustc.edu.cn/~lanrr/data.csv", header = T)
View(mydata)  # show something like this:
# 9:39:37   665 600160  �޻��ɷ�  ����    ����    8.050   100 805.00  ��ȯ �ɽ�        
  ��ȯ����   E004017669  665
  2 9:39:38 697 930 ��������    ����    ����    4.360   283 1233.88    
  ����  �ɽ� ����Ʒ����   680001369   697

数据中包含一些中文单词,但是如果我需要更改编码或做一些其他事情,我没有,有没有人遇到过这个问题?

mydata = read.csv("http://home.ustc.edu.cn/~lanrr/data.csv", 
                   encoding = "UTF-8", header = T, stringsAsFactors = F)
View(mydata)
# 9:39:37   665 600160  <U+00BE><U+07BB><U+00AF><U+00B9><U+0277><dd>    <c2><f4>  
  <U+00B3><f6>  <c2><f2><c2><f4>    8.050   100 805.00  <c8><da><U+022F>     
  <U+00B3><U+027D><U+00BB>  <c8><da><U+022F><c2><f4><U+00B3><f6>    E004017669  665
  2 9:39:38 697 930 <d6><d0><U+0078><c9><fa><U+00BB><U+00AF>    <c2><f4>
  <U+00B3><f6>  <c2><f2><c2><f4>    4.360   283 1233.88 <d0><c5><d3><c3>    
  <U+00B3><U+027D><U+00BB>  <U+00B5><U+00A3><U+00B1><U+00A3><U+01B7><c2><f4><U+00B3> 
  <f6>  680001369   697

sessionInfo()
# R version 2.15.2 (2012-10-26)
  Platform: x86_64-redhat-linux-gnu (64-bit)

  locale:
   [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8              
   LC_COLLATE=en_US.UTF-8    
   [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=C                   
   LC_NAME=C                 
   [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8  
   LC_IDENTIFICATION=C       

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

   other attached packages:
   [1] data.table_1.8.8 TTR_0.22-0       xts_0.9-3        zoo_1.7-9           
   timeDate_2160.97 Matrix_1.0-9     lattice_0.20-10 

   loaded via a namespace (and not attached):
   [1] grid_2.15.2  tools_2.15.2

我最终是这样做的:

Sys.setlocale("LC_COLLATE", "Chinese")
Sys.setlocale("LC_CTYPE", "Chinese")
Sys.setlocale("LC_MONETARY", "Chinese")
Sys.setlocale("LC_TIME", "Chinese")
Sys.setlocale("LC_MESSAGES", "Chinese")
Sys.setlocale("LC_MEASUREMENT", "Chinese")

【问题讨论】:

    标签: r csv input encode


    【解决方案1】:
    1. 下载文件

      wget -O weirdo.csv http://home.ustc.edu.cn/~lanrr/data.csv
      
    2. 在 bash 中,您可以使用以下命令检索文件编码:

      $ file -i ./weirdo.csv
      
    3. 通过粘贴来自 charset= 的输出告诉 R 文件是如何编码的,例如 charset=iso-8859-1

      read.csv("weirdo.csv", fileEncoding = "iso-8859-1")
      

    【讨论】:

      【解决方案2】:

      首先,那个csv文件是用GBK编码的不是 UTF-8,所以代码应该是:

      mydata <- read.csv("http://home.ustc.edu.cn/~lanrr/data.csv", 
                          encoding = "GBK", 
                          header = TRUE, 
                          stringsAsFactors = FALSE)
      

      其次,如果你的env不是中文(简体),你应该set_locale比如(我的示例操作系统是windows 7)

      Sys.setlocale(category = "LC_ALL", locale = "Chinese (Simplified)")
      

      然后显示表格:

      fix(mydata)
      

      【讨论】:

        【解决方案3】:

        您可以使用带有 UTF-8 编码的 read.csv:

        df <-read.csv("data.csv", encoding="UTF-8", stringsAsFactors=FALSE)
        

        把汉字做成Characters而不是Factors。

        注意:我的环境中没有安装中文语言包,所以我无法确定您提供的 .csv 中的乱码是否已损坏或无法识别。

        【讨论】:

        • 我尝试加encoding = "UTF-8(如上图),可以显示数据,但不能显示中文,是不是需要安装中文语言包?
        • @PepsiCo 你能在 Excel 或操作系统的其他任何地方看到汉字吗?
        • 是的,我可以在用 Excel 打开文件时查看数据。你能在http://home.ustc.edu.cn/~lanrr/data.csv上查看文件吗?
        • 我可以看到那个网址的文件但是我没有看到汉字,你看到汉字了吗?
        • 我尝试了函数Sys.setlocale,它似乎有帮助。
        猜你喜欢
        • 2020-08-26
        • 2019-08-14
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 2015-03-20
        相关资源
        最近更新 更多