Rails 如何开发一个彻底 GBK 编码的 Rails 站点呢?

gykpro · 2013年12月11日 · 最后由 gykpro 回复于 2013年12月12日 · 3567 次阅读

需求

访问这个站点的客户端(定制浏览器)只支持 gbk 编码,所以需要输出 gbk 编码的页面(先不管 gbk 和 gbxxxxx 的差异)

已经完成的部分

页面本身已经可以 GBK 编码输出,做法如下:

  • config/application.rb 中加一行 config.encoding = "gbk"

  • controller 中加入

    before_filter :configure_charsets 
    

Configuring charset to WhateverEncodingYouWant

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


- ruby 文件原本是utf-8编码的,于是在头部加入:
`# encoding: utf-8`

现在不带 assets 的页面已经可以运行和正常显示

# 问题
我不知道如何把 assets 文件也进行gbk编码输出
如果什么也不设置,直接访问 /assets/xx.js 会报这个错:

Encoding::UndefinedConversionError: U+00FB from UTF-8 to GBK\n

如果把文件保存成 gbk,会报这个错:

Encoding::InvalidByteSequenceError: \"\\xB4\" on UTF-8"

***所以我的问题是:如何系统地把 assets 输出为 GBK?包括 dev 环境和需要 precompile 的环境***

你这个需求有点逆天,能否解释一下需求?

#1 楼 @lgn21st 嗯,文章开头解释道:某浏览器仅支持 gbk 编码。

#2 楼 @gykpro 。。。求该逆天浏览器细节

#3 楼 @edokeh 其实很多中间件是某种简化的浏览器。或者,抛开这个浏览器的问题,现在淘宝网的首页也还是 gbk 的,假设我就要像他一样逆天地做一个 gbk 页面,也还是会碰上这需求。。当然,淘宝的 gbk 是历史原因。。

#2 楼 @gykpro 因噎废食的感觉,这个工作,或者这家公司不值得你耗费精力在这个上面,参考 http://ruby-china.org/topics/node25

#5 楼 @lgn21st Good point :-) 不过现实中还是有不少这种浏览器的,比如 iptv 里面的很多界面也是定制浏览器,所以并非是那种“给政府做项目,要求兼容 ie6”的项目,哈哈。

用 Rack 中间件能解决这问题吗?只是个想法……

我整过... 其实现在只要 nginx 加个转编码的 mod 就可以了

#8 楼 @luikore 是不是说,我的 assets 按照原样部署开发,最终在线上的 nginx 里设定这个域名下的 js/css 自动转码,同时我在页面中 js,css 文件链接标签中指定它们是 gbk?

#9 楼 @gykpro response header 里已经带 encoding 了,链接标签中不用指定啊 另外比较蛋疼的地方是,按照 XMLHTTPRequest 标准,url 中的非 ascii 字符必须用 utf-8 编码然后转换成 %XX 的格式,所以最好尽量避免在 url 中带上汉字

#10 楼 @luikore 非常感谢!我试试。刚才我搞混了,是很久之前有段时间在 gbk 页面里引用 utf-8 编码的 js 时需要指定

需要 登录 后方可回复, 如果你还没有账号请 注册新账号