`
igogogo9
  • 浏览: 250815 次
  • 性别: Icon_minigender_1
  • 来自: 海口市
社区版块
存档分类
最新评论

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

阅读更多
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字符

这是我做的一个项目程序的一段:
      byte[] b;
      String gbk_value;
      gbk_value=request.getParameter("address");//从HTTP流中取"name"的GBK数据(由于web.xml中过滤器设置默认编码为GBK,所以外网从UTF-8变为GBK)
      b=gbk_value.getBytes("GBK");//中间用GBK过渡,从GBK转换成GBK数组
      String address=new String(b,"utf-8");//转换成utf-8字符
      myform.setAddress(address);

在知道流长度的情况下将输入流转换成字节数组 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

在不知道流长度的情况下将输入流转换成字节数组 前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了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为转换之后的结果
分享到:
评论

相关推荐

    UTF8转成GB2312乱码问题解决方案

    此案例中涉及到的问题是在将UTF8编码的信息转换为GB2312编码的XML文件时,出现了乱码。为了解决这个问题,下面详细阐述了相关的知识点。 首先,我们来了解一下UTF8和GB2312这两种编码格式。UTF8是一种可变长度的...

    中文转utf8

    这段代码演示了如何在 Java 中将 GBK 编码的字符串转换为 UTF-8 编码的 Unicode 和 HTML 实体引用形式。这种转换通常用于网络传输或文本展示,确保不同平台之间的兼容性。通过理解这些基本概念,开发者可以更好地...

    java 把PDF转换成BASE64

    2. **转换为BASE64**:Java 8及以上版本提供了`java.util.Base64`工具类,可以方便地进行BASE64编码。 ```java String base64String = Base64.getEncoder().encodeToString(pdfBytes); ``` 至此,PDF文件已经被转换...

    java对象转换成xml格式

    在Java编程中,将对象转换为XML...总结来说,Java中将对象转换为XML格式的方法多样,可以根据具体需求和项目规模选择合适的方法。在实际应用中,理解这些API的工作原理和使用方式对于优化性能和提高代码质量至关重要。

    java URL转PDF文件

    总结一下,Java中将URL转换为PDF涉及的主要知识点包括: 1. 使用`java.net.URL`和`HttpURLConnection`进行HTTP请求。 2. 使用Jsoup解析HTML。 3. 使用iText或Apache PDFBox等库生成PDF。 4. 可能需要处理HTML到PDF的...

    Java中将汉字转为拼音的Demo

    这个"Java中将汉字转为拼音的Demo"提供了一个实用的工具类,使得开发者能够轻松地实现这一功能,而无需深入了解底层的拼音转换算法。 首先,我们要了解汉字转拼音的基本原理。在Java中,这通常涉及到Unicode编码和...

    Base64与byte[]相互转换

    它被广泛应用于电子邮件、网页等需要将二进制数据转换为文本格式进行传输的场景中。Base64编码的设计目的是为了提高数据传输的兼容性和安全性。 #### 二、Java中的Base64编码与解码 在Java中,可以使用`sun.misc....

    java 中文乱码 处理

    需要注意的是,这里的`gb2312`可以替换为你实际使用的编码格式,比如`UTF-8`或`GBK`等。 #### 方法二:使用Escape和Unescape方法 另一种处理中文乱码的方式是使用字符串的转义与反转义技术。这种方式适用于需要在...

    Java Web程序设计-1期 《Java Web程序设计》_经验技巧.doc

    - 存储到数据库:当在JSP页面中将中文数据存入数据库时,可能会遇到乱码。这是因为Java默认使用Unicode编码,而数据库可能使用ISO-8859-1。在存储时,需要将Unicode字符串转换为ISO-8859-1,从数据库读取时再转换...

    完美解决方案:Java生成复杂Word文档

    configuration.setDefaultEncoding("utf-8"); } public void createDoc() { // 创建数据模型 Map, Object&gt; dataMap = new HashMap(); getData(dataMap); // 加载模板 configuration....

    关于Java Web中中文乱码问题的探讨.pdf

    为了避免中文乱码问题,可以在eclipse中将页面的默认编码设置为UTF-8。具体设置包括三个位置: 1. 设置工作空间编码,通过菜单“Windows”-&gt;“Preferences”-&gt;“Workspace”-&gt;“Text file encoding”来配置。 2. ...

    JAVA上百实例源码以及开源项目源代码

    util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以...

    Java-html转pdf文件

    本篇文章将深入探讨如何在Java环境中将HTML内容转换为PDF,并解决中文字符支持和换行问题。 首先,我们需要一个可靠的库来完成这项工作。Apache PDFBox和Flying Saucer是两个常用的Java库,它们都可以处理HTML到PDF...

    java编程excel导入MySQL.pdf

    【知识点详解】 ...总结,Java编程中将Excel数据导入MySQL数据库的过程涉及了Apache POI库的使用、数据处理、字符编码转换以及JDBC操作。通过理解这些概念,你可以构建一个完整的程序来实现批量数据迁移。

    jQuery的Ajax接收java返回数据方法

    这里的`JSON.toJSONString()`方法直接将Java列表转换成JSON字符串,同时设置了响应的Content-Type为`"application/json;charset=utf-8"`,字符编码改为UTF-8。 如果前端需要的`dataType`是`"html"`,则后端需要返回...

    开发常见的编码异常解决方案

    对于IntelliJ IDEA,可以在`File &gt; Settings &gt; Editor &gt; File Encodings`中将全局项目编码设置为`UTF-8`。 这样的设置可以确保开发过程中的文件内容能够被正确地识别和编辑,避免由于编码不一致导致的问题。 #### ...

    java 根据经纬度获取地址实现代码

    使用`BufferedReader`读取`InputStream`,以UTF-8编码解析响应内容。然后,逐行读取并添加到`res`,直到读取完整个响应。 4. **JSON处理**: 响应内容是JSON格式,代码使用了开源库`org.json`来解析JSON。`...

    mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1 at ...

    java语言程序设计郑莉PPT学习教案.pptx

    * 实现内部格式和外部格式之间的转换 * 支持UTF(Universal character set Transformation Format)编码格式 面向字节的流 面向字节的流是用于一般目的的流。面向字节的流可以用于各种类型的数据,如图像、音频等。 ...

Global site tag (gtag.js) - Google Analytics