Rails中文乱码问题【转】
乱码情况一:netbeas控制台输出乱码
具体表现为:在程序中定义中文字符串,然后输出。但输出为乱码
解决方法:打开netbeans安装目录,找到etc目录下的netbeans.conf文件。在netbeans_default_options的最后面添加上-J-Dfile.encoding=UTF-8
这种情况,一般发生在win下面。
乱码情况二:含有中文目录或文件名的输出为乱码
具体表现为:如:输出root目录,在其下包含有中文的目录或文件名为中文,输出时中文为乱码。
解决方法:设置Encoding.default_internal="UTF-8",其为表示默认内编码为UTF-8,这样目录在读取的时候就会自动转码为UTF-8。
注:如果初始目录的目录名包含中文,则会报找不到文件的错误,如:
No such file or directory - D:\素材 (Errno::ENOENT) 。D:\素材目录是存在的
这个问题,还没找到解决办法。。。
乱码情况三:读取文本文件,输出中文时出现乱码
具体表现为:要读取的文件内容含有中文,在输出时是乱码。原因是文本文件的保存编码和读取输出的编码不一致,如:在win平台下使用记事本新建一个包含中文的文本文件(默认为GBK编码),用netbeas输出时使用UTF-8编码,所以是乱码。
解决办法:
方法一:使用其他文本编辑器打开文本文件然后重新保存,保存编码选择UTF-8编码或其他自己需要的编码。
方法二:使用ruby的转码方法,如GBK转UTF-8,str.encode(Encoding.find("UTF-8"),Encoding.find("GBK"))。格式为str.encode(ecoding_to,encoding_from),encoding_to表示要转换的目的编码,from则为从什么编码转换
乱码情况四:rhtml中含有中文时出现的invalid byte sequence in GBK错误,这个虽然不算乱码但其原因还是中文的编码问题
具体表现为:当要显示的页面中含有中文时,会莫名的报出这个错误。再具体点就是页面的中文只有在特定的情况下才会发生后台报错,比如:JavaScript的中文注释引起错误,但在中文的注释后添加一个‘晕’的汉字后又不报错了。
我的解决方法是在application_controller.rb中添加Encoding.default_internal="UTF-8"。这样就不会出现上面的诡异异常了。
乱码情况五:从数据库中取得数据显示时报 incompatible character encodings: GBK and ASCII-8BIT或 incompatible character encodings: UTF-8 and ASCII-8BIT的错误
具体表现为:数据库中的中文不是乱码,取出来在页面显示时报编码错误。原因是刚从数据库取出来的时候字符串是ASCII-8BIT,尽管已经在database.yml中设置encoding:utf-8但是无效。
这个暂时没找到彻底的解决方法,我是在model里面涉及到中文字符串属性添加一个get前缀的方法,在其内进行转码如:
def get_name
return self.name.force_encoding(Encoding.default_internal)
end def get_name
returnself.name.force_encoding(Encoding.default_internal)
end
当需要取得model的name属性时,使用 model.get_name 代替以前的 model.name。 算是临时的解决方法吧。
乱码情况六:使用ENV读取环境变量,包含中文的乱码。一般这种只发生在win系统上。
直接贴代码,如下:
#coding:utf-8
user = ENV['user']
puts "#{user}"#puts "user的内容是:#{user}" 这句抛出incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
puts "user对象是否被冻结:#{user.frozen?}"
puts "user的编码是:#{user.encoding}"#如果使用破坏性的方法encode!则会出现can't modify frozen string (RuntimeError)的错误#如果第二个参数是ASCII-8BIT 则会出现"\xBF" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)的错误
user = user.encode(Encoding.find("utf-8"),Encoding.find("gbk"))
puts "解码后的user是:#{user}"# 比较奇怪的是 user 明明是GBK编码的,可是encoding方法返回的却是ASCII-8BIT。难道ruby又自作多情的把GBK转换为ASCII-8BIT么? 输出如下: ?????????
user对象是否被冻结:true
user的编码是:ASCII-8BIT
解码后的user是:酷的飞上天空 上面的乱码在我机器上是一个一个的方块。
暂时就遇到这些了,以后补充。大部分的乱码都是系统造成的,看来在win系统上开发还真是问题多多啊。
ruby1.9.1中可以使用魔法注释,即在脚本的第一行添加#coding:UTF-8,这样可以指定脚本所使用的编码。举个例子如下:
#coding:utf-8
puts "中文".length
#输出 2 #coding:ASCII-8BIT
puts "中文".length
输出 6
我想应该就是确定脚本中定义的字符串的编码的作用
原文:http://314858770.iteye.com/blog/687978
Rails中文乱码问题【转】的更多相关文章
- java中文乱码解决之道(一)-----认识字符集
沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- java中文乱码解决之道(九)-----总结
乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- freemarker页面中文乱码
一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...
- tomcat项目中文乱码问题解决方法
在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...
- IE下get传中文乱码的问题 -- 解决方案 (js)
W3school 函数 JavaScript 全局对象 定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIs ...
- JSP和Servlet的中文乱码处理
JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...
- Git bash下中文乱码问题
Git bash下中文乱码--解决方案 解决办法1: 在git bash下,右键 出现下图,选择options: 选择"Text" 将Character set设置为 UTF-8 ...
随机推荐
- Spark 总结2
网页访问时候 没有打开 注意防火墙! 启动park shell bin下面的spark-shell 这样启动的是单机版的 可以看到没有接入集群中: 应该这么玩儿 用park协议 spark:/ ...
- 关于view里面xib的问题
[[[NSBundle mainBundle] loadNibNamed:@"NetFailView" owner:self options:nil] lastObject]; 会 ...
- 数据结构习题 线段树&树状数组
说明:这是去年写了一半的东西,一直存在草稿箱里,今天整理东西的时候才发现,还是把它发表出来吧.. 以下所有题目来自Lrj的<训练指南> LA 2191 单点修改,区间和 Fenwick直 ...
- QT 使用QSettings读写ini配置文件
利用Qsettings包一个类 RWIniFile, writeIni方法写文件, readIni方法读文件 rwinifile.h #ifndef RWINIFILE_H #define RWINI ...
- 51nod 1009 数字1的数量 数位dp
1009 数字1的数量 基准时间限制:1 秒 空间限制:131072 KB 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1 ...
- 刻录DVD.XP系统盘(U盘)
ZC:用这个软件,安装太慢了... 忽然发现 以前有别的软件可以使用:http://www.cnblogs.com/vmskill/p/6196522.html 1.我是在这个论坛看到 这个工具的:h ...
- neutron routers HA 实验
测试环境: 5个节点(( controller,2 network,2 compute nodes)) 采用VXLAN+Linux Bridge 1. 确定所有的neutron和nova服务都在运行 ...
- 2017-03-05 CentOS中配置守护服务(Supervisor)监听dotnet core web程序的运行
我们继续解决上篇博客的问题,我这个人有个毛病,不喜欢遗留什么问题,也不喜欢问题说不明白,具体要怎么解决一定要详尽,因为经常自己遇到问题的时候,去翻别人的博客,就会遇到这样的问题,很苦恼,又说废话了. ...
- .net mvc超过了最大请求长度
项目中遇到"超过了最大请求长度"如下图所示,是因为IIS默认请求长度4M,当请求长度大于这个值的时候报错. 修改maxRequestLength:在web.config中我们修改& ...
- 手动下载 Xcode 文档
下载Xcode文档的方法有两个: 1. 自动下载:到在Xcode的Preserences中Downloads页面的Documentation,点击对应文档的下载. 2. 手动下载:到这个页面:http ...