String ftpFile = new String("通知控件问题总结".getBytes("GBK"),"UTF-8");
System.out.println("UTF-8------->GBK "+new String(ftpFile.getBytes("UTF-8"),"GBK"));
得到:
UTF-8------->GBK 通知锟截硷拷锟斤拷锟斤拷锟杰斤拷
该怎么转码 可以让他正常显示~
System.out.println("UTF-8------->GBK "+new String(ftpFile.getBytes("UTF-8"),"GBK"));
得到:
UTF-8------->GBK 通知锟截硷拷锟斤拷锟斤拷锟杰斤拷
该怎么转码 可以让他正常显示~
String ftpFile = new String("通知控件问题总结".getBytes("GBK"),"ISO-8859-1");
用apache的FTPClient的listNames方法 从ftp服务器上获取文件名, 在本地测得时候, (serv-u)在本机上,xp操作系统, 获得文件名后 要用 new String(ftpFile.getBytes("ISO-8859-1"),"GBK"); 可以正常显示
但集成测试的时候, ftp服务器为windows,客户端在linux上。这么转就不行了,调了很多次,从ISO-8859-1转到任何编码都是乱码, 只有从UTF-8, 转gbk的时候 才能显示几个中文,但多半是乱码。
我用本地(xp)去连远程ftp(windows) 用ISO-8859-1转GBK可以正常显示。 估计就是linux服务器的问题。
现在我用上面的方法 得到的乱码和 linux客户端的乱码是一致的。 所以我觉得ftpFile的格式应该没错
现在就是怎么转过来。 ftpFile的编码格式是一定的。 我没法控制。 所以只能在转码上改。
String ftpFile = new String("通知控件问题总结".getBytes("GBK"), "ISO-8859-1");
System.out.println(new String(ftpFile.getBytes("ISO-8859-1"), "GBK"));
System.out.println("UTF-8------->GBK " + new String(ftpFile.getBytes(), "UTF-8"));
int i;
char j;
if (src != null && src.length() > 0) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j) || j == '-' || j == '_'
|| j == '.') {
tmp.append(j);
} else if (j < 256) {
tmp.append("%");
if (j < 16) {
tmp.append("0");
}
tmp.append(Integer.toString(j, 16).toUpperCase());
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16).toUpperCase());
}
}
return tmp.toString();
} else {
return "";
}
}