转自:http://club.it.sohu.com/r-javalang-10425-0-7-10.html
UTF8转换成GB2312当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:
byte[]b;
Stringutf8_value;
utf8_value=request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据
b=utf8_value.getBytes("8859_1");//中间用ISO-8859-1过渡
Stringname=newString(b,"GB2312");//转换成GB2312字符
在知道流长度的情况下将输入流转换成字节数组Java中的输入流抽象类InputStream有intread(byte[]b,intoff,intlen)方法,参数中byte[]b是用来存放从InputStream中读取的数据,intoff指定数组b的偏移地址,也就是数组b的起始下标,intlen指定需要读取的长度,方法返回实际读取的字节数。
刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读降某ざ龋绻挥卸镣暌阎ざ鹊氖菥陀Ω迷俅味寥。源搜芳觳猓钡绞导识寥〉某ざ壤奂佑胍阎某ざ认嗟龋旅娴拇胧迪至苏庖还δ埽?
ServletInputStreaminStream=request.getInputStream();//取HTTP请求流
intsize=request.getContentLength();//取HTTP请求流长度
byte[]buffer=newbyte[size];//用于缓存每次读取的数据
byte[]in_b=newbyte[size];//用于存放结果的数组
intcount=0;
intrbyte=0;
while(count<size){
//循环读取
rbyte=inStream.read(buffer);//每次实际读取长度存于rbyte中
for(inti=0;i in_b[count+i]=buffer[i];
}
count+=rbyte;
}
在不知道流长度的情况下将输入流转换成字节数组前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[]toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:
ByteArrayOutputStreamswapStream=newByteArrayOutputStream();
byte[]buff=newbyte[100];//buff用于存放循环读取的临时数据
intrc=0;
while((rc=inStream.read(buff,0,100))>0){
swapStream.write(buff,0,rc);
}
byte[]in_b=swapStream.toByteArray();//in_b为转换之后的结果
分享到:
相关推荐
直接在url中传递中文参数时,读到的中文都是乱码,那么我们应该怎么将这些参数转换呢,接下来与大家分享下将字符串转换成utf-8或者gb2312编码的参数的技巧
最近需要对Linux与Windows平台下的字符传输出现乱码,对...参考了网上的UTF-8/UTF-16转换的资料,只有0x10000以下的Unicode编码进行了转换;对其代码进行了修改和补充,可以实现所有的UTF-8/UTF-16的转换,分享给大家。
java中将数据和图片导出到Excel文件
在java中通过ImageMagick安装包和im4java.jar把其他格式图片如HEIC转换为PNG,JPEG等常用格式图片。内有安装操作步骤及编码内容。亲测有效。 场景运用:ios操作系统在前端图片格式上传中。已普遍采用HEIC格式图片。...
主要介绍了在Java 8中将List转换为Map对象方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
java中将多个excel打包成zip文件下载.rar
java中将数据库中数据直接赋值给Map对象,目的是为了方便取值,这种方式需要用到spring框架
此工具可批量修改文件编码(默认gb2312转utf8,可修改) python版本:2.7 使用说明: dirGb2312ToUtf8('F:\work\MyProject\Source\MyProject') 把以上路径改为自己需要转换的文件夹即可
如何在Java中将XML文档转换成HTML文档.pdf
本文介绍了使用Java程序把Word文档直接转换成Html文件的方法。
把其他文件类型转换为pdf,java
使用java把数据库数据导出生成xml文件 使用java把数据库数据导出生成xml文件
提供一种Base64编码,并输出UTF-8格式的BASE64编码方式。本程序在微信小程序开发工具中已经测试通过。 Base64代码: [javascript] view plain copy print? (function(){ var BASE64_MAPPING = [ 'A','B','C','D',...
TIA博途_S7-1200中将BYTE类型的数据转换成char类型的具体方法和注意事项
txt数据集格式转化为xml数据集格式,txt数据集格式一般是yolov5的专用格式,这个脚本是将txt数据集格式转化为xml数据集的格式,使用的时候可以自行调整脚本里xml的每项,将它变成coco数据集格式或者其他数据集格式。
将java的日期转换成中文的日期,可以直接使用的源文件。
不懂这块的看看啦,mysql中中四中时间类型之一的TimeStamp,在项目中的简单运用,如何将TimeStamp转换成自己需要的时间格式
matlab中将mat的格式数据存为tiff图像。 matlab中将mat的格式数据存为tiff图像。 matlab中将mat的格式数据存为tiff图像。 matlab中将mat的格式数据存为tiff图像。matlab中将mat的格式数据存为tiff图像。matlab中将...
Android/java的long类型时间戳,转换成时间格式的工具类
支持在PHP中将编码转换为指定的编码方式 gb2big5 big52gb utf82u u2utf8 gb2utf8 utf82gb