java中的String的getBytes()方法可以获取3个byte,那么如果知道3个byte,如何得到一个字符串汉字呢

java中的String的getBytes()方法可以获取3个byte,那么如果知道3个byte,如何得到一个字符串汉字呢,第1张

String s = new String(byte[] b);就得到一个汉字了。

如果出来的汉字有乱码,可以设置编码:String s = new String(byte[] b,String charset);

public class Demo

{

public static void main(String[] args)

{

String str="例子";

//数组bm保存的就是"例子"的Unicode代码点(10进制)

int[] bm=new int[strlength()];

for(int i=0;i<strlength();i++)

{

bm[i]=strcodePointAt(i);

Systemoutprint(""+bm[i]+" ");

}

}

}

1、获取到待转换的字节数组值

2、确定字节数组转成String的字符编码

3、利用String的构造方法,传入字节数组作为参数,构造新的String。

示例:

byte[] byteArr = new byte[1024];

String s = new String(byteArr, "UTF-8");

您好,提问者:

    确实是不一样的,这个时候给你一种也可用于net对接的加密:

/

 加密方法

 @param str 

 @return

/

public static String encode(String str){

//根据默认编码获取字节数组 

byte[] bytes=strgetBytes();

StringBuilder sb=new StringBuilder(byteslength2);

//将字节数组中每个字节拆解成2位16进制整数

for(int i=0;i<byteslength;i++) { 

sbappend(hexStringcharAt((bytes[i]&0xf0)>>4)); 

sbappend(hexStringcharAt((bytes[i]&0x0f)>>0)); 

return sbtoString();

}

 得到16进制的GBK编码,转换为汉字 

 @param hexStr 

 @return 

/

public static String decode(String hexStr){ 

if( null==hexStr || ""equals(hexStr) || (hexStrlength())%2 != 0 ) {

return null;

}

int byteLength = hexStrlength() / 2;

byte[] bytes=new byte[ byteLength ];

int temp=0;

for(int i=0;i<byteLength;i++) {

temp = hex2Dec(hexStrcharAt(2i))16+hex2Dec(hexStrcharAt(2i+1));

bytes[i]=(byte)( temp<128  temp : temp-256 ) ;

}

return new String(bytes);

}

private static String hexString="0123456789ABCDEF";

private static int hex2Dec(char ch){

if(ch == '0') 

return 0;

if(ch == '1') 

return 1;

if(ch == '2') 

return 2;

if(ch == '3') 

return 3;

if(ch == '4') 

return 4;

if(ch == '5') 

return 5;

if(ch == '6') 

return 6;

if(ch == '7') 

return 7;

if(ch == '8') 

return 8;

if(ch == '9') 

return 9;

if(ch == 'a') 

return 10;

if(ch == 'A') 

return 10;

if(ch == 'B') 

return 11;

if(ch == 'b') 

return 11;

if(ch == 'C')

return 12;

if(ch == 'c') 

return 12;

if(ch == 'D') 

return 13;

if(ch == 'd') 

return 13;

if(ch == 'E') 

return 14;

if(ch == 'e') 

return 14;

if(ch == 'F') 

return 15;

if(ch == 'f') 

return 15;

else return -1;

}

跟编码有关。试试有结论再告诉你。

1、跟Eclipse的编码设定有关。具体路径:Windows->Preferences->General->Workspace中有一个设定项为“Text file encoding”,这个选项指定了保存源码时使用的编码方式。我看了一下在Window下选项为Default(GBK),Linux下该选项为Default(UTF-8),编码方式的不同,决定了“我是中国人”转换成Byte数据不同。这就是为什么在Window下和在Linux下不同结果的原因。

2、在Linux环境下,通过修改上述设定项为Other: GBK,可以得到和Window下的同样效果。修改后的设定截图如下:

PHP中的汉字部分是由文件的编码决定的。或者说目前PHP的字符串不支持汉字,把汉字看成字节原封不动的输出。Java的字符串支持汉字,要另外注意编码。比如PHP使用GBK编码的文件和java通讯时,Java的字符串就要strgetBytes("GBK");转成字节后参与编码。

另外要注意PHP的MCrypt库没有预置补齐函数和键的处理函数,

PHP在AES编码前,要写好和Java一致的,对键和数据进行相应的补齐和处理。

比如Java的AES/CBC/PKCS5Padding 方式,PHP中就要手工写一个PKCS7补齐的方法,

才可能和Java通讯。

以上就是关于java中的String的getBytes()方法可以获取3个byte,那么如果知道3个byte,如何得到一个字符串汉字呢全部的内容,包括:java中的String的getBytes()方法可以获取3个byte,那么如果知道3个byte,如何得到一个字符串汉字呢、java中如何取得中文如“中国”在unicode编码中的表示串、字节数组怎么转string等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9289351.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存