中文编码的怪异问题

本文描述了一个在Rails应用中遇到的关于中文字符处理的问题,特别是在使用String.count与scan方法进行中文词语统计时出现的异常情况。针对特定中文字符在不同环境下的编码差异进行了探讨,并提出了几个具体的技术疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说明下问题出现的环境

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

[/quote]

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

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

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

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

[quote]premature end of regular expression: /\263�[/quote]

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

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

sql语句中插入的数据是
[quote] VALUES(NULL, NULL, '促?[/quote]

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

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

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


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

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

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

第三:怎么绕过这个奇怪的编码问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值