你还在用java.lang.String.getBytes()么?

最近用华为和亚信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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值