gbk编码的文字,包括数字,字母,汉字,特殊字符等,怎么转成utf-8编码? gbk编码的文字,包括数字,字母,汉字,特殊字符等,怎么转成utf-8编码的文字? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知所云的问题“gbk编码的文字”什么地方的文字?页面中?数据表中?文件中? 另外,你想通过 Java 来转,还是随便什么工具来转?反正我是没看懂你要具体问什么东西! 不知道这个是不是满足楼主同学的要求,nio的API不是很熟,代码写的不好看,将就看吧:package com.me.app;import java.io.FileInputStream;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")); }} 先获得byte数组GBK的然后在new一个String加上utf-8 先用一个使用 GBK 编码的 java.io.Reader 读入,再用一个使用 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(); C++语言版中: SIZE_T nLen = wcslen(text); CString str, str1; for (SIZE_T i = 0; i < nLen; i++) { 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]; } } } string类型的相等 求教软考中的几个问题 请问用户手册、结果文档、技术文档怎么写 一个新手关于LOG4J连数据库的问题,请高手解答,万分感谢! 实现Socket的通讯,应该怎么做?小女子,TAI各位了。 小小小程序,帮我查查哪里错了好吗?? 怎样自动生成变量名!立刻给分50 来者有分!!!! 讨论一下 interface 的问题 初学java我该看什么书 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];
} }
}