问题描述:
有两段java转码代码
1:
InputStream in = null;
request.setCharacterEncoding("gb2312");//request.setCharacterEncoding("utf-8");
in = request.getInputStream();
StringBuffer sb = new StringBuffer();
BufferedReader readin=new BufferedReader(new InputStreamReader(in));
String message=readin.readLine();
while((message!=null)&&(!message.equals(""))){
sb.append(message);
message=readin.readLine();
}
return sb.toString().trim();
-------------------------------------------------------------------------------
2:
InputStream in = null;
in = request.getInputStream();
StringBuffer sb = new StringBuffer();
byte[] bt = new byte[1024];
int i;
while ((i = in.read(bt)) != -1) {
sb.append(new String(bt, "UTF-8"));
}
String message = sb.toString().trim();
return message;
-----------------------------------------------------------------------------
1段代码当客户端发过来得是gb2312编码格式的字符串时,转码是正确的。
因为现在客户端发过来的是UTF-8编码格式的字符串了,
原打算把1段代码中request.setCharacterEncoding("gb2312");
改写成request.setCharacterEncoding("utf-8");就可以了。
可是测试发现这样服务器端接收的字符串就成了乱码。
只好写了2段代码。这样服务器端就不再乱码了。想请教各位高手们,
1第一段的代码为什么编码是gb2312就可以,utf-8就不可以呢?
2第二段的代码因为一次读1024个字节,当客户端传过来的字节数大于1024个字节时,会不会有这样的情况:
一个汉字(两个字节),这时1024和1025存放了一个汉字,这样就会把一个汉字的两个字节分别读了出来,进行了转码,会造成某个汉字的乱码呢?(没做过这样的测试,好奇的问一下,呵呵)请前辈们指教。
有两段java转码代码
1:
InputStream in = null;
request.setCharacterEncoding("gb2312");//request.setCharacterEncoding("utf-8");
in = request.getInputStream();
StringBuffer sb = new StringBuffer();
BufferedReader readin=new BufferedReader(new InputStreamReader(in));
String message=readin.readLine();
while((message!=null)&&(!message.equals(""))){
sb.append(message);
message=readin.readLine();
}
return sb.toString().trim();
-------------------------------------------------------------------------------
2:
InputStream in = null;
in = request.getInputStream();
StringBuffer sb = new StringBuffer();
byte[] bt = new byte[1024];
int i;
while ((i = in.read(bt)) != -1) {
sb.append(new String(bt, "UTF-8"));
}
String message = sb.toString().trim();
return message;
-----------------------------------------------------------------------------
1段代码当客户端发过来得是gb2312编码格式的字符串时,转码是正确的。
因为现在客户端发过来的是UTF-8编码格式的字符串了,
原打算把1段代码中request.setCharacterEncoding("gb2312");
改写成request.setCharacterEncoding("utf-8");就可以了。
可是测试发现这样服务器端接收的字符串就成了乱码。
只好写了2段代码。这样服务器端就不再乱码了。想请教各位高手们,
1第一段的代码为什么编码是gb2312就可以,utf-8就不可以呢?
2第二段的代码因为一次读1024个字节,当客户端传过来的字节数大于1024个字节时,会不会有这样的情况:
一个汉字(两个字节),这时1024和1025存放了一个汉字,这样就会把一个汉字的两个字节分别读了出来,进行了转码,会造成某个汉字的乱码呢?(没做过这样的测试,好奇的问一下,呵呵)请前辈们指教。
解决方案 »
- 如何用jmail将整个的表单信息发出去,显示的时候又不出现乱码?
- 语句String _str = (String)null;执行后为什么没有抛出异常,而是仍旧返回空值?毕竟是对空值做强制类型转换呀,请高手解答
- 一个关于IO的问题
- 助学好选:Java中static、this、super、final用法(转载)
- jtable 排序问题
- 用java开发字符界面
- 关于解析HTML的元素问题,请各位高手指点一下,分不够再加也没问题
- java sdk中的例子中 *.java 用写字板打开不能自动换行,不知它用什么文本编辑器?
- to asiaec(星星是你看我的眼睛):
- 那里有MYSQL的JDBC驱动程序
- 怎样用netbean编译64bit 程式?
- 数据类型
1、因为客户端发过来得是gb2312编码格式的字符串,所以接受到的数据本身是GB2312编码
2、当然会出现,当一个汉字的两个字节读出来的ASIC是负数时,会造成这个汉字的乱码
昨天请教了一下,我解决了问题,但还有点儿疑问。
1 我已经说了,我客户端发送的确实是“UTF-8”的编码方式。
第一种方式
request.setCharacterEncoding("gb2312");
request.setCharacterEncoding("utf-8");
其实无论客户端发送的是gb2312或是utf-8格式的都是不起作用的。
我客户端发送gb2312编码的字符串,我去掉request.setCharacterEncoding("gb2312");一样好用。
如果我客户端发送utf-8编码方式的字符串,我不用添加request.setCharacterEncoding("utf-8");
而把BufferedReader readin=new BufferedReader(new InputStreamReader(in));
改写成 BufferedReader readin=new BufferedReader(new InputStreamReader(in,"UTF-8"));
服务器端接收的字符串就不乱码了。原因是new InputStreamReader(in)默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。
恰巧我系统是GBK的编码方式,他兼容GB2312标准。所以传输的是gb2312的编码也不会乱码。疑问:
request.setCharacterEncoding("utf-8"); 这句话为什么没起作用,什么时候又用到这样方式的转码呢?2这个没有实验,感谢两位的回答。所以为了避免乱码。最好还是用第一中的转码方式。
在你使用这个request对象之前就需要设置它的字符编码,在request对象开始使用以后再设置编码是无效的
response也是一样
在网上可了这样一段话
自从Tomcat5.x开始,GET和POST方法提交的信息,Tomcat采用了不同的方式来处理编码,对于POST请求,Tomcat会仍然使用request.setCharacterEncoding方法所设置的编码来处理,如果未设置,则使用默认的iso-8859-1编码。而GET请求则不同,Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。我现在还有疑问就是,我客户端发送的是post请求,我用的spring框架中的Controller来接收的数据
代码如下:
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception { String message = getMessage(request);
}
getMessage(request);就是我发的上面的代码。
疑问就是我也是没有使用request对象时就对request.setCharacterEncoding设置啊。难道这之前tomcat还对request做了什么默认的操作么?
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>然后用了第一种的转码方式
并设置了request.setCharacterEncoding("utf-8");
ServletInputStream in = request.getInputStream ();
StringBuffer sb = new StringBuffer();
byte[] bt = new byte[1024];
int i;
while ((i = in.read(bt)) != -1) {
sb.append(new String(bt));
}这样还是乱码。不是tomcat编码的错误。
我确实是在使用这个request对象之前就需要设置它的字符编码,难道spring框架的问题?