全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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() //使用系统默认字符集进行编码 

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); 
  } 

方法二: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(); 
    } 
  } 
} 

方法三: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 InputStreamReader(fis, charset); 
    while (fis.available() > 0) { 
      int length = isr.read(ch); 
      System.out.println(new String(ch)); 
    } 
  } 
 
  /** 
   * <pre> 
   * 关闭所有流或通道 
   * </pre> 
   * 
   */ 
  public void close() { 
    try { 
      if (in != null) { 
        in.close(); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
 
    try { 
      if (out != null) { 
        out.close(); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
 
    try { 
      if (fis != null) { 
        fis.close(); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
 
    try { 
      if (fos != null) { 
        fos.close(); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
 
  public static void main(String[] args) { 
    CharsetConvertion n = new CharsetConvertion(); 
    try { 
       n.convertionFile_nio("C:/项目进度跟踪.txt", "C:/nio_write.txt"); 
//     n.read("C:/nio_write.txt", "utf-8");// 正确 
      // n.read("C:/nio_write.txt", "gbk");//乱码 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } finally { 
      n.close(); 
    } 
  } 
 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java字符转码  # java字符转码方法总结  # java字符转码几种方法  # 而过  # 就用  # 区内  # 移到  # 过程中  # 如有  # 希望能  # 三种  # 谢谢大家  # 发生错误  # 并保存  # 下次  # FileInputStream  # FileOutputStream  # println  # IOException  # InputStream  # import  # err  # io 


相关文章: 香港服务器租用每月最低只需15元?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  如何零成本快速生成个人自助网站?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何在阿里云香港服务器快速搭建网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何快速重置建站主机并恢复默认配置?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何基于PHP生成高效IDC网络公司建站源码?  七夕网站制作视频,七夕大促活动怎么报名?  淘宝制作网站有哪些,淘宝网官网主页?  测试制作网站有哪些,测试性取向的权威测试或者网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  如何在局域网内绑定自建网站域名?  如何高效利用亚马逊云主机搭建企业网站?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  建站主机助手选型指南:2025年热门推荐与高效部署技巧  如何在Windows虚拟主机上快速搭建网站?  建站168自助建站系统:快速模板定制与SEO优化指南  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  历史网站制作软件,华为如何找回被删除的网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  linux top下的 minerd 木马清除方法  如何彻底删除建站之星生成的Banner?  如何规划企业建站流程的关键步骤?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何通过VPS搭建网站快速盈利?  网页设计与网站制作内容,怎样注册网站?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  建站OpenVZ教程与优化策略:配置指南与性能提升  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何用已有域名快速搭建网站?  如何访问已购建站主机并解决登录问题?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  微课制作网站有哪些,微课网怎么进?  湖北网站制作公司有哪些,湖北清能集团官网?  如何快速选择适合个人网站的云服务器配置?  网站制作公司排行榜,抖音怎样做个人官方网站  在线制作视频的网站有哪些,电脑如何制作视频短片?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  长沙做网站要多少钱,长沙国安网络怎么样?  专业网站建设制作报价,网页设计制作要考什么证?  如何在服务器上配置二级域名建站?  如何在Golang中使用replace替换模块_指定本地或远程路径  实例解析Array和String方法  无锡营销型网站制作公司,无锡网选车牌流程?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  IOS倒计时设置UIButton标题title的抖动问题  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。