浏览 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语句插入时,为什么只能看到一半的字。而数据库中又是正常的. 第三:怎么绕过这个奇怪的编码问题? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-23
rails 1.2以前的中文支持,或者说unicode并不好,特别是字符串操作,求子串如果不小心,就会出现半个字符。
1.2解决了这个问题,现在求unicode字符串的长度,就是正确的了。 所以,请切换到utf8编码,并使用rails1.2。你的问题应该就不存在了。 |
|
返回顶楼 | |
发表时间:2007-01-24
多谢了,不过这里补充点
我还是使用gb2312的,就是在做scan时,作了一次编码转换,但是只能用utf8,utf16依然会这样的错误 |
|
返回顶楼 | |
发表时间:2007-01-24
为什么不用utf-8呢?
|
|
返回顶楼 | |
发表时间:2007-01-24
koska 写道 为什么不用utf-8呢?
当然是项目需要了,rails如果制作完全独立的网站,的确不错。速度也不错,中文的问题也可以用utf-8. 但是如果要考虑和其他的网站合作或者互相交换数据时,还是用gb2312为好。不过一旦在gb2312遇到问题,那么能否解决就完全靠运气了。如何去适应本地化的需求大概是rails推广上的一大难点了。 这次我运气不错,有人帮忙指出问题,并解决了,那下次呢?再下次呢? 这种和中文编码相关的问题,国外的rails开发者估计不会遇到,国内的遇到了也很难解决。麻烦啊. |
|
返回顶楼 | |