gbk编码的文字,包括数字,字母,汉字,特殊字符等,怎么转成utf-8编码的文字?
解决方案 »
- JAVA学习中的疑惑
- 关于 new 的问题
- java获得本机名问题
- 使用taglib报错:Error in using tag library uri='/WEB-INF/struts-bean.tld' prefix='bean': For tag 'cookie', cannot load extra info
- 有没有用jtable实现数据库信息的增删改的例子啊
- 关于线程与继承的一些问题,请大家帮助一下,谢谢大家!!
- 关于一个setVisible的问题??
- 风中的菜鸟:)connectsql调用不起,怎么办?
- 请问在java中如何把字符(char)转换成对应的ascii码?
- 要运行JDBC的程序,该如何设置?
- java.lang.OutOfMemoryError: Java heap space错误~如何解决~~?
- 想实现socket多线程,可运行总得到不想要的结果,也没有报错,但不知道错在哪里?
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;/**
* 将gbk编码的文件内容转换为UTF-8编码。 注意:此java源文件的编码应该设置成和转换后目标编码一职,即UTF-8
*
* @author cherry
*
*/
public class UTF8Converter {
public static void main(String[] args) throws IOException {
final Charset gbk = Charset.forName("GBK");
final Charset utf8 = Charset.forName("UTF-8"); FileInputStream fis = new FileInputStream("/home/cherry/GBK.html");// 原始文件的编码为gbk byte[] b = new byte[fis.available()];
fis.read(b);
System.out.println("转换前编码为gbk:\n" + new String(b, "gbk")); CharsetDecoder gbkDecoder = gbk.newDecoder();
CharsetEncoder utf8Encoder = utf8.newEncoder(); ByteBuffer in = ByteBuffer.wrap(b);
CharBuffer out = gbkDecoder.decode(in);
ByteBuffer result = utf8Encoder.encode(out);
System.out.println("转换后编码为UTF-8:\n" + new String(result.array(), "utf-8"));
}
}
再用一个使用 UTF-8 编码的 java.io.Writer 写出就可以了。BufferedReader in = new BufferedReader(
new InputStreamReader(new FileInputStream("filename.txt"), "GBK"));
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("foo.out"), "UTF-8")));String line;
while ((line = in.readLine()) != null) {
out.println(line);
}in.close();
out.close();
{
if (wcsrchr(_T("][)(}{*,:=;...#"), text[i])) //特殊字符
{
str.Format(_T("%%%x"), text[i]);
str1 += str;
}
else
{
if (text[i] >= 0x0800 && text[i] <= 0xFFFF) //三字节
{
strTmp[i*3] = 224 + (0x0f&(unsigned char)(text[i]>>12)) ; //第一个字节
str.Format(_T("%%%02x"), strTmp[i*3]);
str1 +=str;
strTmp[i*3 + 1] += 128 + (0x3f&(unsigned char)((text[i]) >> 6));//第二个字节
str.Format(_T("%%%02x"), strTmp[i*3+ 1]);
str1 +=str;
strTmp[i*3 + 2] +=128 + (0x3f&(unsigned char)(text[i])); //第三个字节
str.Format(_T("%%%02x"), strTmp[i*3+ 2]);
str1 +=str;
}
else //非三字节
{
str1 += text[i];
} }
}