Java中编码及转化相关问题

Java中编码及转化相关问题

 

1.       Java中,内存存放方式是以Unicode方式进行的,高位在前,windows中相反。例如:

String str = "";

       for (int i=0; i<str.length(); i++) {

           int nHigh = 0xff & (str.charAt(i) >> 8);

           int nLow =  0xff & str.charAt(i);

           System.out.println(Integer.toHexString(nHigh) + ", " + Integer.toHexString(nLow));

 

输出:4e 2d 这说明内存中存放的是Unicode,并且高位在前;而在windows上则发现为:2d 4e

 

2.       常见编码转换相关问题

StringToBytes: javaString都是Unicode,转换为bytes主要是高低位存放问题,如果bytes是在java中使用处理则高位在前,如果是在windows使用处理,则相反。

int nHigh = 0xff & (str.charAt(i) >> 8); //高位

int nLow =  0xff & str.charAt(i); //地位

java中使用处理:

Bytes[i] = nHigh;

Bytes[i+1] = nLow;

 

反过来,bytesToString也是同样的道理。

 

但如果bytes中存放的是其他编码数据,可以采用如下方法:

a.       如果datasutf-8编码的:str = new String(datas,”utf-8”); 注意此时str中存放的是Unicode编码。

b.       如果datasansi编码的:str = new String(datas,”gbk”); 注意此时str中存放的是Unicode编码。

 

3.       关于@符号显示

例如:String str = “@1234”; 在部分手机中会出现显示不出@符号。

解决办法为:

str = String.valueOf(“/u00A9”) + “1234”;

1234g str = ".out.println(str.chat

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值