Java中将数据由UTF8转换成GB2312格式

2016-02-19 12:00 8 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享Java中将数据由UTF8转换成GB2312格式的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

 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;irbyte;i++) {
in_b[count + i] = buffer[i];
}
count += rbyte;
}

在不知道流长度的情况下将输入流转换成字节数组 前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[] toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
int rc = 0;

while ((rc = inStream.read(buff, 0, 100)) 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果

来源:http://www.tulaoshi.com/n/20160219/1599471.html

延伸阅读
《UTF-8与GB2312之间的互换》的改进 作者:李天助 下载源代码 最近,在做一个小程序的时候,突然遇到了汉字编码转换问题。关于如何在UTF-8与GB2312之间转换的问题。在VC知识库里看到吴康彬的文章《UTF-8与GB2312之间的互换》,文章浅显易懂,代码也不长。省了我不少的找资料的时间。在此谢谢...
标签: PHP
  因为证书中有中文,所以需要在PHP中进行GB2312与UTF-8的互换。 网上搜索一下这方面相关资料,说是需要php_iconv.dll的支持,可是我在PHP5文件夹中根本找不到这个文件,但是奇怪的是在PHP4中有这个,然后我将PHP4中的php_iconv.dll文件,复制到system32下,却提示出现错误,我想应该也不行,毕竟PHP4和PHP5里面的文件应该不兼容。到这里...
标签: Web开发
不知道大家在做页面的时候会不会遇到样式定义不生效的问题,基本的表现就是怎么改样式都没显示或只有某些浏览器正常,这时通常需要做下面的几步: 确认所修改的样式文件是否是当前页面的样式文件(多个环境的情况) 确认文件中的路径是否正确(可能手误多写或少写) 如果上面两点都确认没问题或只是一部分样式失效,基本可以确定是文件的编...
标签: Web开发
Dreamweaver CS3默认的新建文档的编码是UTF-8,这对于有些只做GB2312编码网站的设计师来说每次都在页面设置中修改有点麻烦。 其实我们完全可以将Dreamweaver CS3默认的UTF-8编码修改成GB2312,这样我们以后新建的网页就会是GB2312编码了。 首先我们打开Dreamweaver CS3的编辑菜单-选择首选参数设置。如下图:     再选择新建...
标签: 电脑入门
H.264是MPEG-4标准所定义的最新格式,同时也是技术含量最高、代表最新技术水平的视频编码格式之一,有的也称(AVC)。 使用软件MediaCoder可以将视频转换成H264视频格式,它是一个免费的软件,你可以先到百度搜索下载。 启动MediaCoder,主界面如下图所示,请在主界面中,点击左上角的+号选择要转换的视频,然后,请参考下图中红色标出的视频配...

经验教程

287

收藏

52
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部