有关ruby的编码问题

编码问题一直是一个让我特别纠结的问题, 处理起来着实有点小麻烦. 这几天写的ruby程序又碰到了类似的问题.

问题

程序做的事情很简单: 读取一个网页, 将网页上的部分内容解析出来然后发给一个服务器. 程序在本机跑用例的时候都没问题, 可是一跑到测试机器上时就总是发送乱码的数据. 本机和测试环境的机器环境基本一致. 部署直接使用的是rex, 然后直接运行.

神奇的是如果在测试环境上手动启动程序, 这个问题就不存在了. 好吧, 看样子问题出在运行环境的上了. 解决方法比较简单, 就是启动程序的时候指定-E utf-8这个选项. 接下来需要深入看一下原因.

ruby的编码

其实说到底, 有关ruby的编码总共有三个比较关键的变量:

前两者作用于io, 字符串处理, 后者作用于代码文件. 具体的细节就不多说了, 文档上写的比较清楚. 上面的那个例子主要就是因为default_external变量的问题导致的. 使用rex跑程序的时候默认使用US-ASCII造成的.

看来使用rex的时候还是有很多细节需要注意.

最后推荐两篇写的非常详细的介绍ruby编码的文章(阅读完之后受益匪浅):

Comments