Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16493673
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:45:07

下载本文示例代码
  UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能: byte [] b;String utf8_value; utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡String name = new String(b, "GB2312"); //转换成GB2312字符  在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。  刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读到的长度,如果没有读完已知长度的数据就应该再次读取,以此循环检测,直到实际读取的长度累加与已知的长度相等,下面的代码实现了这一功能: ServletInputStream inStream = request.getInputStream(); //取HTTP请求流int size = request.getContentLength(); //取HTTP请求流长度byte[] buffer = new byte[size]; //用于缓存每次读取的数据byte[] in_b = new byte[size]; //用于存放结果的数组int count = 0;int rbyte = 0;while (count < size) { //循环读取 rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中 for(int i=0;i 0) { swapStream.write(buff, 0, rc);}byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果   UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能: byte [] b;String utf8_value; utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡String name = new String(b, "GB2312"); //转换成GB2312字符  在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。  刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读到的长度,如果没有读完已知长度的数据就应该再次读取,以此循环检测,直到实际读取的长度累加与已知的长度相等,下面的代码实现了这一功能: ServletInputStream inStream = request.getInputStream(); //取HTTP请求流int size = request.getContentLength(); //取HTTP请求流长度byte[] buffer = new byte[size]; //用于缓存每次读取的数据byte[] in_b = new byte[size]; //用于存放结果的数组int count = 0;int rbyte = 0;while (count < size) { //循环读取 rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中 for(int i=0;i 0) { swapStream.write(buff, 0, rc);}byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果 下载本文示例代码


Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式Java中将数据由UTF8转换成GB2312格式
阅读(154) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~