当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

<b>Java字符集编码与转码</b>[Java编程]

赞助商链接



  本文“<b>Java字符集编码与转码</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Java编译时刻,会将java文件的编码按照指定编码大概(系统默许的)编码转换为Unicode并加载到内存中举行编译.

下面给出一个Java转码工具,没有测试过,呵呵:

package lavasoft.common;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.*;
/**
* 转码工具,全面支持文件、字符串的转码
*
* @author Administrator 2009-11-29 16:14:21
*/
public class EncodingToolkit {
         private static Log log = LogFactory.getLog(EncodingToolkit.class);
         public static void main(String[] args) {
                 String han = "汉";

                 System.out.println("---------");
         }
         /**
          * 对字符串重新编码
          *
          * @param text     字符串
          * @param resEncoding 源编码
          * @param newEncoding 新编码
          * @return 重新编码后的字符串
          */
         public static String reEncoding(String text, String resEncoding, String newEncoding) {
                 String rs = null;
                 try {
                         rs = new String(text.getBytes(resEncoding), newEncoding);
                 } catch (UnsupportedEncodingException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是利用了不支持的字符编码");
                         throw new RuntimeException(e);
                 }
                 return rs;
         }
         /**
          * 重新编码Unicode字符串
          *
          * @param text     源字符串
          * @param newEncoding 新的编码
          * @return 指定编码的字符串---www.bianceng.cn
          */
         public static String reEncoding(String text, String newEncoding) {
                 String rs = null;
                 try {
                         rs = new String(text.getBytes(), newEncoding);
                 } catch (UnsupportedEncodingException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是利用了不支持的字符编码" + newEncoding);
                         throw new RuntimeException(e);
                 }
                 return rs;
         }
         /**
          * 文本文件重新编码
          *
          * @param resFile   源文件
          * @param resEncoding 源文件编码
          * @param distFile   目标文件
          * @param newEncoding 目标文件编码
          * @return 转码成功时刻返回ture,不然false
          */
         public static boolean reEncoding(File resFile, String resEncoding, File distFile, String newEncoding) {
                 boolean flag = true;
                 InputStreamReader reader = null;
                 OutputStreamWriter writer = null;
                 try {
                         reader = new InputStreamReader(new FileInputStream(resFile), resEncoding);
                         writer = new OutputStreamWriter(new FileOutputStream(distFile), newEncoding);
                         char buf[] = new char[1024 * 64];  //字符缓冲区
                         int len;
                         while ((len = reader.read(buf)) != -1) {
                                 writer.write(buf, 0, len);
                         }
                         writer.flush();
                         writer.close();
                         reader.close();
                 } catch (FileNotFoundException e) {
                         flag = false;
                         log.error("没有找到文件,转码发生非常!");
                         throw new RuntimeException(e);
                 } catch (IOException e) {
                         flag = false;
                         log.error("读取文件为一个内存字符串失利,失利缘由是读取文件非常!");
                         throw new RuntimeException(e);
                 } finally {
                         if (reader != null) try {
                                 reader.close();
                         } catch (IOException e) {
                                 flag = false;
                                 throw new RuntimeException(e);
                         } finally {
                                 if (writer != null) try {
                                         writer.close();
                                 } catch (IOException e) {
                                         flag = false;
                                         throw new RuntimeException(e);
                                 }
                         }
                 }
                 return flag;
         }
         /**
          * 读取文件为一个Unicode编码的内存字符串,保持文件原有的换行格局
          *
          * @param resFile    源文件对象
          * @param encoding 文件字符集编码
          * @return 文件内容的Unicode字符串
          */
         public static String file2String(File resFile, String encoding) {
                 StringBuffer sb = new StringBuffer();
                 try {
                         LineNumberReader reader = new LineNumberReader(new BufferedReader(new InputStreamReader(new FileInputStream(resFile), encoding)));
                         String line;
                         while ((line = reader.readLine()) != null) {
                                 sb.append(line).append(System.getProperty("line.separator"));
                         }
                         reader.close();
                 } catch (UnsupportedEncodingException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是利用了不支持的字符编码" + encoding);
                         throw new RuntimeException(e);
                 } catch (FileNotFoundException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由所给的文件" + resFile + "不存在!");
                         throw new RuntimeException(e);
                 } catch (IOException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是读取文件非常!");
                         throw new RuntimeException(e);
                 }
                 return sb.toString();
         }
         /**
          * 利用指定编码读取输入流为一个内存Unicode字符串,保持文件原有的换行格局
          *
          * @param in             输入流
          * @param encoding 构建字符流时刻利用的字符编码
          * @return Unicode字符串
          */
         public static String stream2String(InputStream in, String encoding) {
                 StringBuffer sb = new StringBuffer();
                 LineNumberReader reader = null;
                 try {
                         reader = new LineNumberReader(new BufferedReader(new InputStreamReader(in, encoding)));
                         String line;
                         while ((line = reader.readLine()) != null) {
                                 sb.append(line).append(System.getProperty("line.separator"));
                         }
                         reader.close();
                         in.close();
                 } catch (UnsupportedEncodingException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是利用了不支持的字符编码" + encoding);
                         throw new RuntimeException(e);
                 } catch (IOException e) {
                         log.error("读取文件为一个内存字符串失利,失利缘由是读取文件非常!");
                         throw new RuntimeException(e);
                 } finally {
                         if (in != null) try {
                                 in.close();
                         } catch (IOException e) {
                                 log.error("关闭输入流发生非常!", e);
                                 throw new RuntimeException(e);
                         }
                 }
                 return sb.toString();
         }
         /**
          * 字符串保存为拟定编码的文本文件
          *
          * @param text         字符串
          * @param distFile 目标文件
          * @param encoding 目标文件的编码
          * @return 转换成功时刻返回ture,不然false
          */
         public static boolean string2TextFile(String text, File distFile, String encoding) {
                 boolean flag = true;
                 if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
                 OutputStreamWriter writer = null;
                 try {
                         writer = new OutputStreamWriter(new FileOutputStream(distFile), encoding);
                         writer.write(text);
                         writer.close();
                 } catch (IOException e) {
                         flag = false;
                         log.error("将字符串写入文件发生非常!");
                         throw new RuntimeException(e);
                 } finally {
                         if (writer != null) try {
                                 writer.close();
                         } catch (IOException e) {
                                 log.error("关闭输出流发生非常!", e);
                                 throw new RuntimeException(e);
                         }
                 }
                 return flag;
         }
}

出处:http://lavasoft.blog.51cto.com/62575/236392


  以上是“<b>Java字符集编码与转码</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .