2013-01-16 41 views
27

我試圖導入日文版的csv。此代碼:read.csv中的多字節字符串無效

url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv' 
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE) 

返回以下錯誤:

Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : 
invalid multibyte string at '<91>ΊO<8b>y<82>ёΓ<e0><8f>،<94><94><84><94><83><8c>_<96>̏@(<8f>T<8e><9f><81>E<8e>w<92><e8><95>@<8a>փx<81>[<83>X<81>j' 

我試圖改變編碼(Encoding(url) <- 'UTF-8',並且還爲latin1),並試圖除去read.csv參數,但接收到的相同的「無效多字節字符串「消息。是否有應該使用的不同編碼,還是存在其他一些問題?

+0

您是否嘗試將'encoding =「UTF-8」'參數設置爲'read.csv()'? – Andrie

+0

是的,結果相同。 – jaredwoodard

回答

54

Encoding設置字符串的編碼。它不會設置字符串表示的文件的編碼,這正是您想要的。

這爲我工作,試圖"UTF-8"後:

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1") 

而且你可能想跳過前16行,並在標題分別讀取。無論哪種方式,仍然有相當多的清理工作要做。

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, 
    fileEncoding="latin1", skip=16) 
# get started with the clean-up 
x[,1] <- gsub("\u0081|`", "", x[,1]) # get rid of odd characters 
x[,-1] <- as.data.frame(lapply(x[,-1], # convert to numbers 
    function(d) type.convert(gsub(d, pattern=",", replace="")))) 
+0

謝謝。從[這個問題](http://stackoverflow.com/questions/11069908/r-extracting-clean-utf-8-text-from-a-web-page-scraped-with-rcurl)我試着設置本地日語與'Sys.setlocale'但這也沒有工作(「操作系統報告請求設置區域設置爲」日本「不能被尊重」)。 – jaredwoodard

+0

是的,read.csv(「foobar.csv」,fileEncoding =「latin1」)爲我工作。我有一個Excel文件並保存爲CSV,然後必須將fileEncoding設置爲「latin1」以在R中讀取該CSV。 –

7

你可能也遇到過這個問題,因爲系統語言環境的不兼容的 嘗試設置系統區域設置使用此代碼Sys.setlocale("LC_ALL", "C")

0

對於使用Rattle這個問題下面的是我如何解決它:

  1. 首先要確認撥浪鼓退出讓你在R命令提示符
  2. > library (rattle)(如果不這樣做的話)
  3. > crv$csv.encoding="latin1"
  4. > rattle()
  5. 您現在應該能夠進行。即,導入CSV>執行>模式>執行

這爲我工作,希望這可以幫助一個疲憊的旅客

-1

我有科學的文章有類似的問題,在這裏找到了一個很好的解決方案: http://tm.r-forge.r-project.org/faq.html

通過使用下面的代碼行:

tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte"))) 

你CONVER將多字節字符串轉換爲十六進制代碼。 我希望這可以幫助。

0

如果您嘗試導入到最初是Excel文件的R中的文件。請確保您打開原始文件並保存爲csv,並在導入到R時爲我解決了此錯誤。

5

tidyverse Universe中的readr軟件包可能有所幫助。

您可以通過使用local()功能和它的編碼參數設置通過read_csv()函數的局部參數編碼:

read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv", 
     skip = 14, 
     local = locale(encoding = "latin1")) 
0

我有同樣的錯誤,並嘗試了上述所有無濟於事。當我從R 3.4.0升級到3.4.3時,問題消失了

相關問題