记得以前从一个文本文件中读取中文字内容时,如下方法所示:
/**
* 按行对去读取文本文件内容
* @param fileName
* 文件路径与文件名
* @throws IOException
*/
public void readFile(String fileName)
{
try
{
InputStream is = new FileInputStream(fileName);
ByteArrayOutputStream byteout = new ByteArrayOutputStream();
byte tmp[] = new byte[1024];
byte context[];
is.read(tmp);
byteout.write(tmp);
context = byteout.toByteArray();
String str = new String(context, "GBK");
System.out.println(str);
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
* 按行对去读取文本文件内容
* @param fileName
* 文件路径与文件名
* @throws IOException
*/
public void readFile(String fileName)
{
try
{
InputStream is = new FileInputStream(fileName);
ByteArrayOutputStream byteout = new ByteArrayOutputStream();
byte tmp[] = new byte[1024];
byte context[];
is.read(tmp);
byteout.write(tmp);
context = byteout.toByteArray();
String str = new String(context, "GBK");
System.out.println(str);
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
同样的方法处理ID3标签是出现了问题。new String(context, "GBK");出来的还是乱码。。。。
查阅了各种资料,写了个简单的解决方法测试,如下:
package cn.edu.ynu.sei.liva.test;
public class CharSetDecoder
{
public static void main(String[] args)
{
try
{
String musicName = "Ó¸ҵÄÐÄ";
System.out.println("Before decoding: " + musicName);
// 1. 把musicName(按Unicode->ISO-8859-1) 转回原来的byte[]。
// 2. 因为原来的歌名是GBK编码方式,所以把bytes[] 按照GBK->Unicode的方式转码
String musicNameDecode = new String(musicName.getBytes("ISO-8859-1"), "GBK");
System.out.println("After decoding:" + musicNameDecode);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public class CharSetDecoder
{
public static void main(String[] args)
{
try
{
String musicName = "Ó¸ҵÄÐÄ";
System.out.println("Before decoding: " + musicName);
// 1. 把musicName(按Unicode->ISO-8859-1) 转回原来的byte[]。
// 2. 因为原来的歌名是GBK编码方式,所以把bytes[] 按照GBK->Unicode的方式转码
String musicNameDecode = new String(musicName.getBytes("ISO-8859-1"), "GBK");
System.out.println("After decoding:" + musicNameDecode);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
呵呵,终于可以彻底搞定Java的字符编码问题了!