论坛首页 编程语言技术论坛

中文编码的怪异问题

浏览 4341 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-23  
先说明下问题出现的环境

引用

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语句插入时,为什么只能看到一半的字。而数据库中又是正常的.

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


   发表时间:2007-01-23  
rails 1.2以前的中文支持,或者说unicode并不好,特别是字符串操作,求子串如果不小心,就会出现半个字符。

1.2解决了这个问题,现在求unicode字符串的长度,就是正确的了。
所以,请切换到utf8编码,并使用rails1.2。你的问题应该就不存在了。
0 请登录后投票
   发表时间:2007-01-24  
多谢了,不过这里补充点
我还是使用gb2312的,就是在做scan时,作了一次编码转换,但是只能用utf8,utf16依然会这样的错误
0 请登录后投票
   发表时间:2007-01-24  
为什么不用utf-8呢?
0 请登录后投票
   发表时间:2007-01-24  
koska 写道
为什么不用utf-8呢?

当然是项目需要了,rails如果制作完全独立的网站,的确不错。速度也不错,中文的问题也可以用utf-8.
但是如果要考虑和其他的网站合作或者互相交换数据时,还是用gb2312为好。不过一旦在gb2312遇到问题,那么能否解决就完全靠运气了。如何去适应本地化的需求大概是rails推广上的一大难点了。

这次我运气不错,有人帮忙指出问题,并解决了,那下次呢?再下次呢? 这种和中文编码相关的问题,国外的rails开发者估计不会遇到,国内的遇到了也很难解决。麻烦啊.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics