• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java字符转码的三种方法总结及实例

java字符转码的三种方法总结及实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了java 字符转码,java字符类型,java字符,java字符流,java字符数组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

java字符转码:三种方法

转码成功的前提:解码后无乱码

转码流程:文件(gbk)-->解码-->编码--->文件(utf-8) 

注:如有问题请留言 

下面具体的实例

 方法一:Java.lang.String

//用于解码的构造器: 
String(byte[] bytes, int offset, int length, String charsetName)  
String(byte[] bytes, String charsetName)  
 
用于编码的方法: 
byte[] getBytes(String charsetName) //使用指定字符集进行编码 
 byte[] getBytes() //使用系统默认字符集进行编码 

</div>
public void convertionString() throws UnsupportedEncodingException{ 
    String s = "清山"; 
    byte[] b = s.getBytes("gbk");//编码 
    String sa = new String(b, "gbk");//解码:用什么字符集编码就用什么字符集解码 
    System.out.println(sa); 
     
    b = sa.getBytes("utf-8");//编码 
    sa = new String(b, "utf-8");//解码 
    System.err.println(sa); 
  } 
</div>

方法二:java.io.InputStreamReader/OutputStreamWriter:桥转换 

package com.qingshan.io; 
 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 
 
/** 
 * <pre> 
 * 使用java.io桥转换:对文件进行转码 
 * </pre> 
 * <hr Color="green" ></hr> 
 * 2012 Qingshan Group 版权所有 
 * <hr Color="green" ></hr> 
 * @author thetopofqingshan 
 * @version 1.0.0 
 * @since  JDK 1.5 
 * @date  2012-4-28 
 */ 
public class CharsetConvertion { 
  private FileInputStream fis;// 文件输入流:读取文件中内容 
  private InputStream is; 
  private InputStreamReader isr; 
  private OutputStream os; 
  private OutputStreamWriter osw;//写入 
  private char[] ch = new char[1024]; 
  public void convertionFile() throws IOException{ 
    is = new FileInputStream("C:/项目进度跟踪.txt");//文件读取 
    isr = new InputStreamReader(is, "gbk");//解码 
    os = new FileOutputStream("C:/项目进度跟踪_utf-8.txt");//文件输出 
    osw = new OutputStreamWriter(os, "utf-8");//开始编码 
    char[] c = new char[1024];//缓冲 
    int length = 0; 
    while(true){ 
      length = isr.read(c); 
      if(length == -1){ 
        break; 
      } 
      System.out.println(new String(c, 0, length)); 
      osw.write(c, 0, length); 
      osw.flush(); 
    } 
     
  } 
   
  public void convertionString() throws UnsupportedEncodingException{ 
    String s = "清山集团"; 
    byte[] b = s.getBytes("gbk");//编码 
    String sa = new String(b, "gbk");//解码:用什么字符集编码就用什么字符集解码 
    System.out.println(sa); 
     
    b = sa.getBytes("utf-8");//编码 
    sa = new String(b, "utf-8");//解码 
    System.err.println(sa); 
  } 
   
   
 
  /** 
   * <pre> 
   * 关闭所有流 
   * </pre> 
   * 
   */ 
  public void close(){ 
    if(isr != null){ 
      try { 
        isr.close(); 
      } catch (IOException e) { 
        e.printStackTrace(); 
      } 
    } 
    if(is != null){ 
      try { 
        is.close(); 
      } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 
     
    if(osw != null){ 
      try { 
        osw.close(); 
      } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 
     
    if(os != null){ 
      try { 
        os.close(); 
      } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 
  } 
   
  /** 
   * <pre> 
   * 用io读取文件内容 
   * </pre> 
   * 
   * @throws IOException 
   *       读取过程中发生错误 
   * 
   */ 
   
  /** 
   * <pre> 
   * 
   * </pre> 
   * @param path 
   * @param charset 
   * @throws IOException 
   * 
   */ 
  public void read(String path, String charset) throws IOException { 
    fis = new FileInputStream(path); 
    isr = new InputStreamReader(fis, charset); 
    while (fis.available() > 0) { 
      int length = isr.read(ch);  
      System.out.println(new String(ch)); 
    } 
  } 
 
   
  public static void main(String[] args) { 
    try { 
      CharsetConvertion cc = new CharsetConvertion(); 
      cc.convertionFile(); 
      cc.convertionString(); 
      cc.close(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 
</div>

方法三:java.nio.Charset

package com.qingshan.nio; 
 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.nio.ByteBuffer; 
import java.nio.CharBuffer; 
import java.nio.channels.FileChannel; 
import java.nio.charset.Charset; 
import java.nio.charset.CharsetDecoder; 
import java.nio.charset.CharsetEncoder; 
 
/** 
 * <pre> 
 * 使用nio中的Charset转换字符:整个流程是文件读取-->byte-->解码(正确)-->编码--->byte-->写入文件 
 * </pre> 
 * <hr Color="green" > 
 * </hr> 
 * 2012 Qingshan Group 版权所有 
 * <hr Color="green" > 
 * </hr> 
 * 
 * @author thetopofqingshan 
 * @version 1.0.0 
 * @since JDK 1.5 
 * @date 2012-4-27 
 */ 
public class CharsetConvertion { 
  private FileInputStream fis;// 文件输入流:读取文件中内容 
  private FileChannel in;// 文件通道:双向,流从中而过 
  private FileChannel out;// 文件通道:双向,流从中而过 
  private FileOutputStream fos;// 文件输出流:向文件中写入内容 
  private ByteBuffer b = ByteBuffer.allocate(1024 * 3);// 设置缓存区的大小 
  private Charset inSet;// 解码字符集 
  private Charset outSet;// 编码字符集 
  private CharsetDecoder de;// 解码器 
  private CharsetEncoder en;// 编码器 
  private CharBuffer convertion;// 中间的字符数据 
  private ByteBuffer temp = ByteBuffer.allocate(1024 * 3);// 设置缓存区的大小:临时 
  private byte[] by = new byte[1024]; 
  private InputStreamReader isr; 
  private char[] ch = new char[1024]; 
 
  /** 
   * <pre> 
   * 
   * </pre> 
   * 
   * @param src 
   * @param dest 
   * @throws IOException 
   * 
   */ 
  public void convertionFile_nio(String src, String dest) throws IOException { 
    fis = new FileInputStream(src); 
    in = fis.getChannel(); 
    fos = new FileOutputStream(dest); 
    out = fos.getChannel(); 
    inSet = Charset.forName("gbk"); 
    outSet = Charset.forName("utf-8"); 
    de = inSet.newDecoder(); 
    en = outSet.newEncoder(); 
    while (fis.available() > 0) { 
      b.clear();// 清除标记 
      in.read(b); // 将文件内容读入到缓冲区内:将标记位置从0-b.capacity(), 
            // 读取完毕标记在0-b.capacity()之间 
      b.flip();// 调节标记,下次读取从该位置读起 
      convertion = de.decode(b);// 开始编码 
 
      temp.clear();// 清除标记 
      temp = en.encode(convertion); 
      b.flip(); // 将标记移到缓冲区的开始,并保存其中所有的数据:将标记移到开始0 
      out.write(temp); // 将缓冲区内的内容写入文件中:从标记处开始取出数据 
    } 
  } 
 
  /** 
   * <pre> 
   * 测试转码是否成功, 指定字符集读取文件 
   * </pre> 
   * 
   * @param src 
   *      被复制文件全路径 
   * @param charset 解码字符集 
   * 
   * @throws IOException 读取过程中的发生的异常 
   * 
   */ 
  public void read(String path, String charset) throws IOException { 
    fis = new FileInputStream(path); 
    isr = new Inpu



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java字符转码的三种方法总结及实例

相关文章

  • 2017-05-28Java中Object.equals和String.equals的区别详解
  • 2017-05-28详谈java线程与线程、进程与进程间通信
  • 2017-05-28Ajax实现搜索引擎自动补全功能
  • 2017-05-28Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)
  • 2017-05-28详解springmvc之json数据交互controller方法返回值为简单类型
  • 2017-05-28SpringMVC结合ajaxfileupload实现文件无刷新上传代码
  • 2017-05-28Java 队列 Queue 用法实例详解
  • 2017-05-28Java中==运算符与equals方法的区别及intern方法详解
  • 2017-05-28Linux centos7环境下jdk安装教程
  • 2017-05-28java实现留言板功能实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Java中StringBuffer和StringBuilder_动力节点Java学院整理
    • 详解Java中字符流与字节流的区别
    • Java Runtime类详解_动力节点Java学院整理
    • java、freemarker保留两位小数
    • SWT(JFace) Menu、Bar...体验代码
    • Spring Boot启动过程(六)之内嵌Tomcat中StandardHost、StandardContext和StandardWrapper的启动教程详解
    • Spring Batch读取txt文件并写入数据库的方法教程
    • mybatis自动生成时如何设置不生成Example类详解
    • java springmvc乱码解决归纳整理详解
    • 详解springmvc之json数据交互controller方法返回值为简单类型

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有