最近用华为和亚信cmpp api,都发现一个问题:再把一个String转化一个byte[]的时候,居然没有指定编码方式!也就是说使用的是s.getBytes()方法!
这个方法是以系统的默认编码,来进行这个转换操作。而在不同的计算机上,这个值可能被设置为不同。比如,我的座机xp,默认编码就是gbk。而我的一个服务器,默认编码就是utf-8。为了确保你的程序更加可移植,你得认真考虑是否使用s.getBytes()。我建议你明确地指定编码方式进行转换。
有兴趣的朋友,可以用下面的代码试试。然后你更改你的windows的区域设置。再运行一下。
Copy code
package test;
class charset {
public static void main(String[] args) throws Exception {
String s = "汉字-123-abc";
printIT(s.getBytes());
printIT(s.getBytes("GBK"));
printIT(s.getBytes("ASCII"));
printIT(s.getBytes("UTF-8"));
printIT(s.getBytes("UnicodeBigUnmarked"));
}
static void printIT(byte[] theByte) {
for (byte b : theByte) {
System.out.print(b);
System.out.print(" ");
}
System.out.println();
}
}
http://blog.ccidnet.com/blog.php?do=showone&uid=14592&type=blog&itemid=52726