CocoaPods invalid byte sequence in UTF-8

CocoaPods作为iOS开发常用的包管理工具一直深受大家的喜爱,但是它出现问题的时候也让我们非常纠结。最近我就遇到这么一个让人纠结的错误ArgumentError - invalid byte sequence in UTF-8,下面就来说下如何解决它。

我的问题是当你pod search <content>时就会报这个错误,详细的错误提示如下:

/Users/yzq/.rvm/gems/ruby-2.4.1@global/gems/cocoapods-1.2.1/lib/cocoapods/user_interface/error_report.rb:135:in `error_from_podfile': invalid byte sequence in UTF-8 (ArgumentError)

期间我尝试了重新下载repo、重新安装CocoaPods、甚至重新安装Ruby环境都没有解决,手动摊手。

当你Google这个错误或者在CocoaPods的issues里面搜索之后,你大致会发现以下几种解决方案。

字符集错误

这种方法认为你本地字符集没有配置好,需要配置成标准的en_US.UTF-8,执行以下命令即可,或者将以下命令添加的相应的shell配置文件当中,例如:~/.bashrc或者~/.zshrc。

//使用命令locale可以查看本地字符集

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

然而这种方法并没有解决我的问题,我使用locale命令查看同事的电脑的字符集,发现和我一样是zh_CN.UTF-8,然而他的CocoaPods却没有问题,所以断定不是字符集的问题。

Podfile文件当中字符错误

我的错误是pod search时出现的,和Podfile并没有什么关系,但如果你是在pod install或者pod update时出现了这个错误,请检查一下你Podfile当中的引号或者逗号,如果你使用了文本编辑器编辑过Podfile,那么问题就可能出现在这里,毕竟我们不太会注意到文本编辑器的编码。

这里就有一个案例,我感觉应该有蛮多人会犯这个错误吧。

索引文件错误

以上方案都未果时,我偶然发现也可以用Homebrew安装CocoaPods,我尝试性的用它重装了一下CocoaPods,结果pod search时还是报错,但是错误变成了incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)

接着我又在网上找了一下,发现了下面这么一条issue。

https://github.com/CocoaPods/CocoaPods/issues/5338

我按照里面的描述,删除了~/Library/Caches/CocoaPods/search_index.json文件,pod search奇迹般的可以了。

其中也大概提到出现这个问题的原因,可能是CocoaPods在创建索引时,我们ctrl+c取消了这个操作,这导致索引生成的某些字符有问题,所以我们删除索引文件,重新生成即可。