首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测在R中会产生"invalid multibyte string“错误的编码问题

如何检测在R中会产生"invalid multibyte string“错误的编码问题
EN

Stack Overflow用户
提问于 2016-02-24 06:55:11
回答 2查看 906关注 0票数 0

关于堆栈溢出的几个问题已经处理了R中的“无效多字节字符串”错误,当某些字符串处理函数接收到未正确设置字符串编码的字符串时,会触发该错误。有关如何设置编码的答案,请参阅stackoverflow.com/questions/14363085/invalid-multibyte-string-in-read-csvstackoverflow.com/questions/4993837/r-invalid-multibyte-string

我的问题是:我如何发现问题所在?这是必要的,因为可能无法通过肉眼检查知道何时错误编码仅在长向量的少数元素中,或在大型数据帧的列中。

EN

回答 2

Stack Overflow用户

发布于 2016-02-24 06:55:11

这个简单的例程使用一个触发错误的基函数来测试错误:

代码语言:javascript
复制
has.invalid.multibyte.string  <- function(x,return.elements=F)
{
      # determine if "invalid multibyte string" error will be triggered
      # if return.elements=T, then output is logical along x, otherwise single logical
      if (is.null(x))
            return(F)
      if (return.elements)
      {
            n <- length(x)
            out <- rep(F,n)
            for (i in 1:n)
                  out[i] <- is.error(try(toupper(x[i]),silent = T))
      }
      else
            out <- is.error(try(toupper(x),silent = T))
      return(out)
}

is.error <- function(x)
{
      # test output of try()
      return(class(x)[1]=="try-error")
}

示例(请注意“更正”编码的iconv()语句):

代码语言:javascript
复制
> a1 <- c("Restaurant","Caf\xe9","Bar")
> a2 <- iconv(a1,from="ISO-8859-1")
> a1
[1] "Restaurant" "Caf\xe9"    "Bar" 
> a2
[1] "Restaurant" "Café"       "Bar"       
> Encoding(a1)
[1] "unknown" "unknown" "unknown"
> Encoding(a2)
[1] "unknown" "UTF-8"   "unknown"
> has.invalid.multibyte.string(a1)
[1] TRUE
> has.invalid.multibyte.string(a2)
[1] FALSE
> has.invalid.multibyte.string(a1,return.elements = T)
[1] FALSE  TRUE FALSE
票数 4
EN

Stack Overflow用户

发布于 2020-12-23 04:47:12

从R版本3.3.0 (发布于2016年5月)开始,基本R包含函数validEnc(),该函数返回一个逻辑向量,指示字符向量的每个元素是否具有有效编码。例如:

代码语言:javascript
复制
validEnc(c("Caf\xe9", "Café"))
# [1]  FALSE TRUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35589887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档