中文编码的怪异问题

阅读更多
先说明下问题出现的环境

引用

ruby 1.8.5
rails 1.1.6
mysql 5
数据库使用gb2312编码
在config中特别设置了encoding: gb2312属性
开发工具用vim,文件编码用gb2312
每一个action都有设置“charset=gb2312”
ruby的string编码没有特别设置。



在开发的时候用到了中文文本的词语统计功能。其先选择了String.count,不过这个函数怎么调用的结果都不对。

只要count的对象是中文的词组,那么结果就是错误的。

于是就使用了scan,很好.每次都是正确的。编写了一小段的测试代码,保证每一错误之后,就写到了action中。

测试过程中,发现有个特殊的字 "出"字。只要被统计的词组中带有这个"出"字,就会提示错误。错误提示如下

引用
premature end of regular expression: /\263�


不过在单独的测试代码中,这个字并不会引起错误. 仔细检查了这个字的输入和输出过程,发现了些问题.

比如,往数据库中添加 “促出”这个词组时,log中 post的数据是
引用
"word"=>"\264俪\366"


sql语句中插入的数据是
引用
VALUES(NULL, NULL, '促?


当然在mysql中,用mysql-front察看的结果 还是"促出",一点都没差。但是一旦从数据库中读取出来,用到mytext.scan(a.word)时,就会提示上面的 scan错误.

从这些表象看起来,scan是把字符转换编码之后才开始查找字符串的。很不巧的是,‘出’的转换似乎有些异常。 但是这个对于测试代码中用到 scan('出')是解释不通的。

而且 从数据库中读取的a.word的内容,如果直接输出到log,或者检测其长度,都是正确的。唯独scan使用后就会有异常。


这里有些疑问,希望了解的同学解答下.

第一:post上来的中文为啥不用gb2312编码,看上去像utf-8 或者utf-16的编码,这个能否调整.

第二:sql语句插入时,为什么只能看到一半的字。而数据库中又是正常的.

第三:怎么绕过这个奇怪的编码问题?


你可能感兴趣的:(Rails,MySQL,Ruby,vim,SQL)