ROR 中文问题tips

 
1、创建项目
 在命令行运行:rails c:\depot
 会在c:\depot下产生项目代码框架
 
2、配置数据库
 首先要配置好数据库,在c:\depot\config\database.yml 中定义
  我们使用mysql,找到如下代码
  development:
  adapter: mysql
  database: depot_development
  username: root
  password:
  host: localhost
  encoding: utf8   
<== 重要!要把编码设置与mysql数据库一样,否则乱码
  
  你要建立一个简单的数据库,再建一个表。
3、生成代码
   确定配置好数据库并建立表后。
   命令行输入:其中中Product 是你在数据库中建立的一个表名
  1. cd c:\depot   
  2. ruby script/generate scaffold Product Admin  

   生成Admin的控制、模型及视图代码。
4、启动Ruby web服务器 
  1. cd c:\depot   
  2. ruby script/server  

   WEBrick 1.3.1服务会启动,默认监听在3000端口上。
 
5、打开浏览器,访问网页
    命令行输入: [url]http://localhost:3000/admin[/url]
   如果没有问题,就会出现一个针对Product数据表的能够增、删、查、改的简单程序。
6、可能遇到的问题:

   数据库乱码问题:
      要在config\database.yml中加入encoding: utf8 选项,当然这里utf8要根据你的建立数据库的编码填写相应值 。  
  
 
7.对于字符串截取问题,一个中文占两个字符问题:
      在c:\depot\config\environment.rb 中加入以下代码            
ruby 代码
  1. $KCODE = 'u'   
  2.  require 'jcode'  
 这样一个 中文字符只占一个了!
 可用如下代码测试一下:
<%="中1华332人民共和国".split(//)[0,4] %> 
输出:中1华3
 
其他乱码解决方法:
1、查看你的rhtml文件或rb编码是否是UTF8,如果不是,则要改成utf8,方法是使用记事本或editplus等编辑器另存一下,另存时下面有个编码选项,改为UTF8保存即可。
2、mysql数据库编码是否正确
查看mysql数据库编码,进入mysql命令行中,输入命令
代码
  1. mysql>  show Variables like '%set%';   
  2.   
  3. +--------------------------+--------------+   
  4. | Variable_name            | Value    |   
  5. +--------------------------+--------------+   
  6. | auto_increment_offset    | 1        |   
  7. | character_set_client     | utf8     |   
  8. | character_set_connection | utf8     |   
  9. | character_set_database   | utf8     |   
  10. | character_set_filesystem | binary   |   
  11. | character_set_results    | utf8     |   
  12. | character_set_server     | utf8     |   
  13. | character_set_system     | utf8     |    
  14. +--------------------------+--------------+   
 
如果显示为上面的内容,则说明你的mysql编码为UTF8。
如果不是,则要修改mysql安装目录下的my.ini文件,把其中的所有编码改为UTF8就行,批量查找替换一下会很快。

utf8和unicode的关系
utf其实是(Unicode Translation Format), 也就是unicode在传输时候的编码, 有utf8和utf16等多种编码, 其实uf8是一个对中文字很不友好的编码, 为什么呢,因为在utf8中, 一个中文是占用3个字节,而一个英文ascii字符却只占用1个字节, 这样一方面使得中文体积膨胀较厉害, 另外一方面也不能简单的通过计算字节数来推算字符数. utf16就比较正常, 每个字符占用两个字节.但是目前utf16已经后面的utf32应用较少, utf8 是比较公认的编码
utf8 还是 gb2312/gbk
我个人选择utf8,因为我觉得gb2312/gbk不是通用编码,如果使用可能还会有其他问题(比如多语言支持)
转换编码
我们需要require 'iconv' 库, 然后执行
Iconv.conv("utf8","GBK","....") #把字符由GBK转换为UTF8
当源字符集中含有非法编码的时候,我们需要告诉iconv忽略, 否则iconv会报错停止
Iconv.conv("utf8//IGNORE","GBK//IGNORE","....")
utf8 的中文操作:
计算字符数:
在默认的ruby环境下面, 需要执行

require 'jcode'
$KCODE='u' # 或者$KCODE='UTF8' 两者是等价的
计算字符数:
使用jsize或者jlength
"你好".size # 6
"你好".jsize # 2
截取字符操作
"你好"[0,1] #乱码
"你好".scan(/./)[0,1].join # "你"

当然还有另外一个办法:
利用utf16编码每个字都是2个字节(头还有两个字节)的特点,我们可以先把字符转换为utf16,然后按照[0,n*2+2]的方法截取前n个字符 (试验成功.求证中)
Iconv.conv("UTF8","UTF16",Iconv.conv("UTF16","UTF8","你好a中b文")[0,8]) #你好a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值