【问题标题】:R: invalid multibyte string [duplicate]R:无效的多字节字符串[重复]
【发布时间】:2011-02-14 15:19:18
【问题描述】:

我使用不带任何参数的 read.delim(filename) 来读取 R 中制表符分隔的文本文件。

df = read.delim(file)

这按预期工作。现在我收到一条奇怪的错误消息,我无法理解它:

Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : 
invalid multibyte string at '<fd>'
Calls: read.delim -> read.table -> type.convert
Execution halted

谁能解释一下多字节字符串是什么? fd 是什么意思?还有其他方法可以在 R 中读取选项卡文件吗?我的列标题和行没有所有列的数据。

标签: r


【解决方案1】:

我意识到这已经很晚了,但我遇到了类似的问题,我想我会发布对我有用的东西。我使用了iconv 实用程序(例如"iconv file.pcl -f UTF-8 -t ISO-8859-1 -c")。 “-c”选项会跳过无法翻译的字符。

【讨论】:

  • 尝试使用此代码设置系统本地化 Sys.setlocale("LC_ALL", "C")
  • names(c)
【解决方案2】:

如果您想要一个 R 解决方案,这里有一个小便利功能,我有时会使用它来查找有问题的(多字节)字符潜伏在哪里。请注意,它是打印内容的 next 字符。这是因为print 可以正常工作,但substr 在存在多字节字符时会引发错误。

find_offending_character <- function(x, maxStringLength=256){  
  print(x)
  for (c in 1:maxStringLength){
    offendingChar <- substr(x,c,c)
    #print(offendingChar) #uncomment if you want the indiv characters printed
    #the next character is the offending multibyte Character
  }    
}

string_vector <- c("test", "Se\x96ora", "works fine")

lapply(string_vector, find_offending_character)

我修复了那个角色并再次运行它。希望对遇到invalid multibyte string错误的人有所帮助。

【讨论】:

  • 不错。这帮助我在巨大的 R 字符串中找到未知/不可见字符。
【解决方案3】:

我在使用 e-prime 程序(edat -> SPSS 转换)中的文件时遇到了类似的奇怪问题,但后来我发现您可以使用许多其他编码。这对我有用:

tbl <- read.delim("dir/file.txt", fileEncoding="UCS-2LE")

【讨论】:

  • 当使用readr 时,它将改为read_delim(someFile, locale = locale(encoding = "windows-1252"))
【解决方案4】:

这发生在我身上,因为我的一个字符串中有“版权”符号!删除后,问题就解决了。

一个好的经验法则是,如果您看到此错误,请确保删除键盘上未显示的字符。

【讨论】:

    【解决方案5】:

    我发现 Leafpad 是一个足够简单的文本编辑器,可以在某些字符集中查看和保存/转换 - 至少在 linux 世界中是这样。

    我使用它来将 Latin-15 保存为 UTF-8,并且成功了。

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2016-03-28
      • 2019-12-11
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多