MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 关于字符编码与解码的几个小问题,希望大家一起讨论

关于字符编码与解码的几个小问题,希望大家一起讨论(3)

www.MyException.Cn  网友分享于:2015-08-27  浏览:29次

数据库的字符集会对程序产生什么影响?
数据库用的字符集不同,rs.getString("")取出来的字符串是跟什么有关?
不同字符集拼接在一起,会不会有影响?
------解决方案--------------------
如果在<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
中指定pageEncoding="GBK",页面输入框输入的数据将被编码成GBK,发送的时候将以GBK的编码发送,
而如果指定contentType="text/html; charset=GBK",这是指定浏览器显示网页内容的编码,
如果在tomcat的server.xml文件的 <Connector>中设置URIEncoding属性,那么所有tomcat收到的数据都将以URIEncoding指定的编码进行编码,个人见解!
------解决方案--------------------
Java code

InputStream ins = rs.getBlob("XXX").getBinaryStream();
for(int i = 0; (data = ins.read()) != -1; i++)
{
    bytes[i] = (byte)data;
}
String sContent = new String(new String(bytes,"GBK").getBytes("UTF-8"),"UTF-8");

------解决方案--------------------
乱码问题一般都是在传递过程中产生的。
一般可以归为以下几个过程:
1、页面到后台代码
2、后台代码到页面(常见)
3、后台到数据库(常见)

根据不同的过程产生乱码的现象,可以根据不同的方式来解决
譬如:
1、页面到后台,可以用如下方式
s = request.getParameter("");
s = new String(s.getBytes("GBK"), "UTF-8");

2、后台到页面
例如:response.setCharacterEncoding("UTF-8");

3、这种情况比较容易解决,可以设置数据库为gbk格式或utf8格式
utf8和utf-8是不同的,前者是数据库的,而后者是用于网页的编码格式

然后,在进行持久化操作之前,将要存储的数据转码,参考第一条。




------解决方案--------------------
mark
------解决方案--------------------
探讨
其实我想问的是,如果我把中文用下面的方式转化了后,再怎么转换回正常的汉字来。 
String s = "中文"; //此处你的s的编码格式其实是UTF-8
try {
s = new String(s.getBytes("UTF-8"), "GBK");
System.out.println(s); //由于是GBK编码了,打印出来是乱码!
s = new String(s.getBytes("GBK"), "UTF-8");
System.out.println(s); //由于将其编码成了UTF-8,打印出来是正常中文了
} catch (UnsupportedEncodingException e3) {
e3.printStackTrace();
}
// System.out.println(s);



------解决方案--------------------
你可以自己试一下,慢慢体会!
------解决方案--------------------
同意三楼的!
记得有个强人就跟我们讲过关于乱码的问题
其中就提到了
在做项目的过程中,发现用URL传request参数的时候,在第二个页面上得到乱码的问题。把上面几种方法都试了一下还是不行。仔细追踪了一下,发现在页面的源代码上中文是正常的,一直到URL还是中文正常,可是在后台的Action里面log出来就成了乱码了,于是猜想是在request封装的过程中把中文变成乱码了,以致于后台直接就是取到的乱码。在后台Action中Set入中文,页面上正常显示,说明Struts的中文已经不存在问题。剩下的,应该就只有doGet和doPost方法的问题了。找了一下tomcat的配置文件,发现只要在server.xml中:
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
< Connector port ="8080" maxHttpHeaderSize ="8192"
maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75"
enableLookups ="false" redirectPort ="8443" acceptCount ="100"
connectionTimeout ="20000" disableUploadTimeout ="true" />
<!-- Note : To disable connection timeouts, set connectionTimeout value
to 0 -->
改为
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
< Connector port ="8080" maxHttpHeaderSize ="8192"
maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75"
enableLookups ="false" redirectPort ="8443" acceptCount ="100"
connectionTimeout ="20000" disableUploadTimeout ="true" URIEncoding ="GBK" />

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有