【问题标题】:Rails force input to encode in windows-1250Rails 强制输入在 windows-1250 中进行编码
【发布时间】:2016-04-25 09:35:07
【问题描述】:

我正在使用 charset windows-1250 在 firebird 中的现有数据库上制作应用程序。 由于这种编码,我遇到了很多麻烦,但我无法更改它。

我现在最大的错误是当我为输入对象制作表单时,称为通知,如下所示:

 form do |f|
  panel Iconv.conv('windows-1250', 'utf-8', 'Opis zgłoszenia:'), 
    :class=> 'panel_dodaj_new' do
      f.input :opis_zgloszenia, label:false
    end
 end


它尝试将文本保存在 utf-8 中,但我希望它保存在 windows-1250 中。
如何强制:opis_zgloszenia 以不同于 utf-8 的字符集保存?

【问题讨论】:

    标签: ruby-on-rails utf-8 character-encoding


    【解决方案1】:

    我找到了在控制器中更改编码的方法。
    在我的创建方法中,我添加:

    @notification.opis_zgloszenia = 
    Iconv.conv('windows-1250', 'utf-8', @notification.opis_zgloszenia)
    

    我也需要改变我的更新方法:

    if @notification.update(notification_params)
        @notification.opis_zgloszenia = Iconv.conv('windows-1250', 'utf-8', @notification.opis_zgloszenia)
        if @notification.save
          redirect_to request.url
        end
      end
    

    现在一切正常。

    【讨论】:

      【解决方案2】:

      我认为更合适的解决方案是为整个数据库配置默认编码。这样,我希望 Rails 能够透明地转换数据库(windows 1250)和 Rails 代码/网页(UTF-8)之间的编码。您应该可以使用database.yml 配置中的encoding 设置进行设置。

      因此,以下内容应该适合您:

      development:
        adapter: fb
        database: db/development.fdb
        username: SYSDBA
        password: masterkey
        host: localhost
        encoding: windows-1250
        create: true
      

      请参阅Firebird adapter documentation 了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-11
        • 1970-01-01
        • 2017-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多