Rails, oracle, Netbeans 6 中文问题解决

本文介绍了在Rails应用中处理中文乱码的方法,包括rhtml页面显示、数据库读写及Netbeans输出窗口乱码等问题,并提供了具体配置步骤。

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

   最近试着用rails做一个小项目,在处理中文时遇到了一些麻烦,于是在网上google来baidu去,再加上自己的一些实践,总算是解决了。

    首先介绍一下我的开发平台: rails 2.0.0.1, oracle 9i, netbeans 6 , windows 2003。应该是具有普遍代表性的。下面我先绍一下遇到的问题及处理原理,最后再给出实际的配置代码。

   其中遇到的中文处理问题主要有以下三种:

   1. rhtml显示乱码:

          写在页面中的中文如 <h>首页</h>在浏览器中显示为乱码。

         这个其实很好解决,只要设定浏览器的编码方式与rhtml的存储格式一致就行了,比如我的rhtml是按照utf-8来保存的,那么在浏览器里的编码也要选择utf-8。原理就不多说了,大家应该都明白。

  2.数据库中的内容在浏览器中显示为乱码,或输入的中文存进数据库变成乱码

       这个问题比较有意思,因为这只发生在浏览器上,在pl/sql或toad上没这个问题,一切正常。

        因此,这个问题处理起来要复杂一些,和数据库的服务器的字符集设置,还有数据库客户端设置都有关系,与rhtml的编码设置也有关。因为各种数据库的设置并不一样,所以在下面我只能给出oracle的解决方法。

      oracle本身对字符的处理取决于两个方面:服务器端字符集配置和客户端字符集配置。简单来说就是下面两种情况:

  • 服务器端和客户端配置的字符集一致

              此时在把数据存入表中或把数据从表中取出时,oracle对字符不做任何转换,你输入的是什么就是什么,相当于二进制存储,此时oracle不会了解你用的是什么编码,只是原样按照二进制的01码存入或取出。

  • 服务器端和客户端不一致

         此时oracle会对存取操作进行转换,在取出时,由服务器字符集转为客户端字符编码,存入时,由客户端编码转入服务器编码。

       根据以上的原理,我们似乎可以得出这样一个结论,如果oracle服务器端的字符集和客户端的字符都支持中文字符,不管一致不一致,oracle都应该没有乱码问题(中文版的oralce安装时编码默认一般是gbk或utf-8),因为它会自动转换编码。的确如此,其实乱码的产生完全是因为应用程序(pl/sql, toad,web)的错。下面根据我的实际环境来说一下错误是怎么产生的:

       服务器字符集:ZHS16GBK

       客户端字符集:ZHS16GBK

      这两个字符集的配置是一样的,因此不存在编码转换的问题。那为什么网页上显示却是乱码呢,这是因为在rhtml中我把编码设置为utf-8,这样浏览器就认为所有传给它的字符应该是utf-8编码的,而实际上我们从数据库中取出的是以 gbk编码的字符,当浏览器以utf-8的编码方式来解释gbk的字符时,当然会产生乱码。(那为什么pl/sql devloper显示是正确的呢?呵呵,告诉你一个秘密,windows 对于非unicode程序,默认的字符集是cp936,而cp936呢,其实就等于gbk)。

       知道了原因,那解决起来就好办了,立刻动手,把oralce客户端的编码改为utf-8,网页就一切正常了...但是,这样一来,pl/sql却没法看了。所以我们应该让oralce客户端只在rails中使用utf-8,而其他程序中还是用gbk(方法在后面给出)。

       如果你想问,为什么一定要用utf-8, 而不用gbk,那么我想你应该看看下面一个问题。

      3.当rails中使用GBK保存文件时,中文处理会出错

         如果你把文件存为gbk格式,而在文件中又写了下面一句的话,我保证你将无法看到精美的网页。

          <%= "管理" %>

       这是因为rails(ruby)对字符串的处理有问题,使用的字符集可能是基于日文的,所以对有些中文字会无法解析。

       解决的方法就是修改rails的默认编码。

   4. Netbeans的输出(output)窗口显示中文乱码

      这是因为你的文件用了utf-8格式,改用gbk就好了。目前还不知道如何能让utf-8格式在output窗口中正常显示。

----------------------------------------------------------------------------------------------------

   下面是具体的配置部分,分为utf-8和gbk两种情况下的配置,请注意oracle部分,我的环境中服务器端和客户端原本都是gbk字符集,所以如果你的配置和我的不同,请根据实际情况修改。

   UTF-8配置:

       第一步要在 project properties  窗口,将 rais >> encoding 选项设为utf-8

       然后在下列文件中添加代码:

         in enviroment.rb:

           #处理oracle字符编码问题
            ENV['NLS_LANG'] = "AMERICAN_AMERICA.UTF8"
    

     in appliction.rb:

           before_filter :configure_charsets 
      def configure_charsets 
          response.headers["Content-Type"] = "text/html; charset=UTF-8" 
      end

    in controller 或 layout 文件:

      <meta http-equiv="content-type" content="text/html;charset=UTF-8" />

 

GBK配置:

       第一步要在 project properties  窗口,将 rais >> encoding 选项设为GBK

       然后在下列文件中添加代码:

         in enviroment.rb:

          #设置rails默认编码
                         $KCODE="GBK" 
                          ActionController::Base.default_charset=( "GBK ")
    

     in appliction.rb:

          before_filter :configure_charsets 
      def configure_charsets 
          response.headers["Content-Type"] = "text/html; charset=GBK 
      end

    in controller 或 layout 文件:

      <meta http-equiv="content-type" content="text/html;charset=GBK" />

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值