GBK转UTF-8的方法 JAVA

原创 2011年01月10日 19:48:00

最近在做一个能分析网站新闻的网络爬虫,对方要求中文的新闻信息用UTF-8存储。可是国内大部分新闻网站的网页源代码里的中文都是GB2312 的,所以必须转成UTF-8.在网上搜了很多方法,有人自己写的,有人用String newcontent=new String(content.getBytes("GBK"),"UTF-8");这种方法,可是试过之后,好好的汉字都变成了乱码。于是到搜了一下英 文网页,很快就找到了解决之道。缺点是不是直接在内存中进行转换,而是把以GBK编码存储的文件转换成以UTF-8编码存储的文件。不管怎么说,能解决我的问题就好。(GB2312是GBK的子集,解决了GBK就解决了GB2312,在我这个项目里,由于GB2312不能正常显示某些不常用字,所以我使用了GBK)

英文网址如下,有兴趣的朋友可以看一下:http://www.chinesecomputing.com/programming/java.html

我把代码贴过来。convert(String infile, String outfile, String from, String to)函数就是转换函数,其中infile是要转换的文件路径,outfile是转换后存储的文件路径,from是infile的字符集,对应我的项目就 是GBK, to是outfile的字符集,对应我的项目就是UTF-8.
注意infile和outfile不能为相同路径,否则最后转换出的文件会是空文件。

import java.io.*;
public class inputtest {
  public static void main(String[] args) {
    String outfile = null;

    try { convert(args[0], args[1], "GBK", "UTF8"); } // or "GB2312" or "BIG5"
    catch (Exception e) {
      System.out.print(e.getMessage());
      System.exit(1);
    }
  }

  public static void convert(String infile, String outfile, String from, String to)
       throws IOException, UnsupportedEncodingException
  {
    // set up byte streams
    InputStream in;
    if (infile != null) in = new FileInputStream(infile);
    else in = System.in;
    OutputStream out;
    if (outfile != null) out = new FileOutputStream(outfile);
    else out = System.out;

    // Use default encoding if no encoding is specified.
    if (from == null) from = System.getProperty("file.encoding");
    if (to == null) to = System.getProperty("file.encoding");

    // Set up character stream
    Reader r = new BufferedReader(new InputStreamReader(in, from));
    Writer w = new BufferedWriter(new OutputStreamWriter(out, to));

    // Copy characters from input to output.  The InputStreamReader
    // converts from the input encoding to Unicode,, and the OutputStreamWriter
    // converts from Unicode to the output encoding.  Characters that cannot be
    // represented in the output encoding are output as '?'
    char[] buffer = new char[4096];
    int len;
    while((len = r.read(buffer)) != -1)
      w.write(buffer, 0, len);
    r.close();
    w.flush();
    w.close();
  }

}


转换后可以用“秀丸”这个文字编辑工具查看转换前后文字的编码。

 

有时候中文网页难以搜到答案时,去一下英文网页,也许答案马上就出来了~因此,学好英文是必要的。

相关文章推荐

java和jsp中文编码问题的解决方法(ISO8859_1、GBK、UTF-8)(精品)

java和jsp中文编码问题的解决方法(ISO8859_1、GBK、UTF-8) Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之...

php中iconv函数使用方法 php 字符集转换 GBK 转 UTF-8

iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库。 1、下载libiconv函数库http://ftp.gnu.org/pub/gnu/libiconv/libico...

Java项目GBK编码转UTF-8

方法一:使用Apache的common-io1.maven项目pom.xml commons-io commons-io 2.5 2....

使用java的native2ascii工具命令来转换编码gbk,gb2312,utf-8【转】

native2ascii的用法 Sun也太吝啬了,也不多给点使用例子. 它的帮助只有:用法:native2ascii [-reverse] [-encoding 编码] [输入文件 [输出文件]]...

Java 中文字符串编码之GBK转UTF-8

写过两篇关于编码的文章了,以为自己比较了解编码了呢?! 结果今天又结结实实的上了一课。 以前转来转去解决的问题终归还是简单的情形。即iso-8859-1转utf-8,或者iso-8859-1转gb...

java项目编码格式转换(如GBK转UTF-8)

昨天突然下了个Java项目,把项目导入到eclipse中,发现项目是gbk编码格式想把项目变为utf-8,但是发现转换格式比较麻烦就写了这个代码,后面改进了下,想到说不定有人也需要就把它写了出来 代...

java gbk转utf-8乱码问题

最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK编码,对方公司是UTF-8编码。因此,我需要将GBK编码数据转换成UTF-8编码数据,这样对方网站才不会乱码。最简单的方法是将HttpCl...

java gbk转utf-8乱码问题

最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK编码,对方公司是UTF-8编码。因此,我需要将GBK编码数据转换成UTF-8编码数据,这样对方网站才不会乱码。最简单的方法是将HttpCl...

[JAVA] GBK转UTF-8汉字乱码 发现与解决

就在昨晚想写一个爬饿了么查找最适合满减价格的外卖,我的步骤是先把网页保存下来先实验正则匹配的程序, 文件打开的方式是 BufferedReader br = new BufferedReader(ne...

java 编码 UTF-8、ISO-8859-1、GBK

  • 2014年05月10日 09:10
  • 17KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GBK转UTF-8的方法 JAVA
举报原因:
原因补充:

(最多只允许输入30个字)