`
jack
  • 浏览: 392733 次
  • 来自: 温州
社区版块
存档分类
最新评论

中文编码的怪异问题

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

引用

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

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


分享到:
评论
4 楼 jack 2007-01-24  
koska 写道
为什么不用utf-8呢?

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

这次我运气不错,有人帮忙指出问题,并解决了,那下次呢?再下次呢? 这种和中文编码相关的问题,国外的rails开发者估计不会遇到,国内的遇到了也很难解决。麻烦啊.
3 楼 koska 2007-01-24  
为什么不用utf-8呢?
2 楼 jack 2007-01-24  
多谢了,不过这里补充点
我还是使用gb2312的,就是在做scan时,作了一次编码转换,但是只能用utf8,utf16依然会这样的错误
1 楼 alang 2007-01-23  
rails 1.2以前的中文支持,或者说unicode并不好,特别是字符串操作,求子串如果不小心,就会出现半个字符。

1.2解决了这个问题,现在求unicode字符串的长度,就是正确的了。
所以,请切换到utf8编码,并使用rails1.2。你的问题应该就不存在了。

相关推荐

    浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)

    比如本文所述的中文网页GBK编码的诡异问题。 现象 例如:盲录職氓聭聵,其实网页里面正常的应该是会员 分析 接着上面的例子,会员这部分乱码通过repr()函数求值得到如下结果 \xc3\xa4\xc2\xbc\xc2\x9a\xc3\xa5\xc2\...

    python实现unicode转中文及转换默认编码的方法

    本文将详细介绍如何在 Python 中实现 Unicode 到中文的转换,以及如何更改默认编码以避免常见的编码问题。 #### Unicode 转中文 Unicode 是一种支持世界上几乎所有的书写系统的字符编码标准,它为每种语言中的每个...

    java资料夹

    2. **JQuery.ajax传递中文参数乱码的解决方法.txt** - 在发送Ajax请求时,如果数据包含中文字符,可能会出现乱码问题。这通常是因为字符编码不一致导致的。解决方法包括确保请求体和响应体的字符集统一,如设置...

    用Python写网络爬虫-35页

    *中文网页的乱码问题:解决方法是编码转换。 * 设置延迟时间:例如,设置每10秒翻开一个新的网页,以避免占用过多的带宽。 在实践中,爬虫的策略是多种多样的,例如深度优先、广度优先等。根据实际情况选择合适的...

    java面试题,肯定好,不好怪我!

    1. **Char型变量能否存储中文汉字?** - **答案**:可以。Java使用Unicode编码,每个`char`变量占用16位,因此完全可以存放一个中文字符。 2. **多线程实现方法** - **实现方法**:主要有两种实现方式: - **...

    《链接器和加载器》(中文版)

    ### 《链接器和加载器》(中文版)—— 关键知识点详解 #### 第1章 链接和加载 **链接器和加载器的作用**: - **链接器**负责将多个目标文件(通常是由编译器产生的)链接成一个可执行文件或库。 - **加载器**则是在...

    重要知识HTML5head头标签.pdf

    不正确的DOCTYPE可能导致浏览器进入怪异模式,这会导致渲染问题。 2. **字符编码(charset)**: `<meta charset="utf-8">`用于指定文档的字符编码,确保不同语言的文字正确显示。HTML5推荐使用这种方式,而不再...

    liblcl:通用的跨平台GUI库,核心使用Lazarus LCL

    中文 liblcl 一个通用的跨平台GUI库,核心使用Lazarus LCL。 已支持语言: go: c/c++: 完成度较高的语言: nim(Beta): rust(test): 测试中的语言 语言绑定工具生成器:,目前已经生成了c/c++、rust、nim的,详细...

    HTML head 头标签详细介绍

    `<html lang="">`属性用于声明文档的语言,比如`<html lang="zh-cmn-Hans">`表示简体中文,`<html lang="zh-cmn-Hant">`表示繁体中文。使用ISO 639-1语言代码和ISO 3166-1 alpha-2地区代码可以提供更精确的语种识别...

    Advanced Bash-Scripting Guide <>

    echo 一些诡异的变量 5-2. 转义符 6-1. exit/exit 状态 6-2. 否定一个条件使用! 7-1. 什么情况下为真? 7-2. 几个等效命令test,/usr/bin/test,[],和/usr/bin/[ 7-3. 算数测试使用(( )) 7-4. test 死的链接文件 7-5. ...

    ExtAspNet_v2.3.2_dll

    -实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 -俄语翻译(feedback:vbelyaev)。 +2010-06-30 v2.3.1 -ExtAspNet控件将不在依赖ViewState,...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。...

    CSS样式控制实现IE提交表单记录历史点击返回信息仍在

    第二个标签则设置了页面的内容类型为text/html,并指定了字符编码为GB2312(简体中文字符编码)。 4. CSS样式表: 样式表通过标签定义在页面的头部中,它包含了两部分样式规则: input { behavior:url(#default#...

Global site tag (gtag.js) - Google Analytics