E 的值为"EUC"时,将假定字符串或正则表达式的编码为 EUC-JP。 同样地,若为"SJIS"时则认定为 Shift JIS。若为"UTF8"时则认定为 UTF-8。 若为"NONE"时,将不会识别多字节字符串。 在向该变量赋值时,只有第 1 个字节起作用,且不区分大小写字母。
"e" "E" 代表 "EUC","s" "S" 代表 "SJIS","u" "U" 代表 "UTF8",而"n" "N" 则代表 "NONE"。 默认值为"NONE"。 即默认情况下 Ruby 把字符串当成单字节序列来处理。
四、为什么会乱码?
乱码是个老问题, 从上面我们知
道, 字符在保存时的编码格式如果和要显示的编码格式不一 样的话,就会出现乱码问题。 我们的 Web 系统,从底层数据库编码、Web 应用程序编码到
HTML 页面编码,如果有一 项不一致的话,就会出现乱码。 所以,解决乱码问题说难也难说简单也简单,关键是让交互系统之间编码一致。
五、有没有万金油?
在如此多种编码和字符集弄的我们眼花缭乱的情况下, 我们只需选择一种兼容性最好的编码 方式和字符集,让它成为我们
程序子系统之间 交互的编码契约,那么从此恼人的乱码问题即将远离我们而去 -- 这种兼容性最好的编码就 是 UTF-8! 毕竟 GBK/GB2312 是国内的标准,当我们大量使用国外的开源
软件时,UTF-8 才是编码界 最通用的语言。
1.GBK 包含 GB2312,即如果通过 GB2312 编码后可以通过 GBK 解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码; 3.getBytes() 是通过平台默认字符集进行编码;
二、中文乱码出现
在
学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如 MySQL,是因为在安装 时没有设置;而在 Servlet 中,也会遇到中文乱码问题; 比如: OutputStream out = response.getOutputStream(); out.write(String );
输出中文时可能会出现乱码; 比如:
[java] view plaincopyprint?
1. protected void doGet(HttpServletRequest request, HttpServletResponse re sponse) throws ServletException, IOException { 2. 3. 4. 5. 6. } OutputStream out = response.getOutputStream(); String data = "博客"; out.write(data.getBytes("UTF-8"));
protected void doGet(HttpServle OutputStream ou String data = " out.write(data. }
输出乱码的
问题是程序用 UTF-8 编码,而浏览器用 GB2312 解码,因此会出现乱码;
Servlet 乱码分为 request 乱码和 response 乱码; 乱码;
三、response 中文乱码
在网上很有效的解决方法是添加: response.setCharacterEncoding("UTF-8"); 解决不了,后来又搜到一条解决方法是: respnse.setHeader("content-type","text/html;charset=UTF-8"); 两句都填上,后来终于解决了这个问题; 其实我们应该思考一下本质;
问题 1: :
我们这里先来说明一下错误的原因,下图是显示乱码的流程图:
response.setContentType("text/html;charset=UTF-8"); 目的是为了控制浏览器的行为,即 目的是为了控制浏览器的行为, 浏览器的行为 进行解码; 控制浏览器用 UTF-8 进行解码; response.setCharacterEncoding("UTF-8"); 的目的是用于 response.getWriter()输出的字 目的是用于 输出的字 符流的乱码问题, 是不需要此种解决方案的; 符流的乱码问题,如果是 response.getOutputStream()是不需要此种解决
方案的;因为这 是不需要此种解决方案的 解码后发向浏览器; 句话的意思是为了将 respons
e 对象中的数据以 UTF-8 解码后发向浏览器;
解决方案流程图:
问题 2 问题代码如下: 问题代码如下:
[java] view plaincopyprint?
1. protected void doGet(HttpServletRequest request, HttpServletResponse re sponse) throws ServletException, IOException {
2. 3. 4. 5. }
PrintWriter out = response.getWriter(); String data = "博客"; out.println(data);
protected