ActiveRecord Sql Server中文问题
最近在尝试使用ActiveRecord连接使用Sql server,发现中文编码问题始终让人困惑。
google一把也没发现多少有建设性的提示。
以下是本人经过尝试发现可行的两种方法。直接贴代码进行解释(还不知道怎么着色代码,不好意思,幸好代码短小)
方法一:文件保存格式ANSI
# coding : gb2312 #指示字符串编码为gb2312
require "rubygems"
require "active_record"
require 'odbc_utf8' #使用odbc utf8的版本,才能支持数据库中文插入
require 'iconv' #编码转换库
conv=Iconv.new('UTF-8','GB2312') #从GB2312 转换为数据库需要的utf-8
convBack=Iconv.new('GB2312','UTF-8') #数据库utf-8编码转换为gb2312
ActiveRecord::Base.establish_connection(
:adapter => "sqlserver",
:mode=>"odbc",
:dsn=>"localhost",
:database=> "ruby",
:username => "sa",
:password => "123",
:encoding=>"gb2312"
)
class Road < ActiveRecord::Base
end
d=Road.find 1
puts '高速公路公司' #由于字符串编码已指明为gb2312,直接输出不乱码
begin
d.road_name=conv.iconv("高速公路公司") #存入数据库需把gb2312转为utf-8
d.save
puts 'done!'
end
s=Road.find 1
puts convBack.iconv(s.road_name) #从数据库读出utf-8编码,转换为gb2312
puts "成功"
方法二:文件保存格式UTF-8
# coding : utf-8 #指示源文件字符编码格式为utf-8
require "rubygems"
require "active_record"
require 'odbc_utf8' # odbc utf8版本
require 'iconv'
conv=Iconv.new('GB2312','UTF-8') # utf-8 转gb2312
ActiveRecord::Base.establish_connection(
:adapter => "sqlserver",
:mode=>"odbc",
:dsn=>"localhost",
:database=> "ruby",
:username => "sa",
:password => "123",
:encoding=>"gb2312"
)
class Road < ActiveRecord::Base
end
d=Road.find 1
puts conv.iconv('高速公路') #utf-8 转换为gb2312输出
begin
d.road_name='广清高速公路' # 编码为utf-8 ,符合数据库要求
d.save
puts 'done!'
end
s=Road.find 1
puts conv.iconv(s.road_name) #utf-8 转换为gb2312输出
还没有测试过进程外输入的编码问题,不过估计 -E选项+适当的编码转换可以解决这个问题。

浙公网安备 33010602011771号