首页编程javaunicode java中Unicode到底是什么啊

javaunicode java中Unicode到底是什么啊

编程之家 2023-11-06 64次浏览

大家好,今天小编来为大家解答以下的问题,关于javaunicode,java中Unicode到底是什么啊这个很多人还不知道,现在让我们一起来看看吧!

javaunicode java中Unicode到底是什么啊

java处理unicode字符

unicode编码简而言之就是将每一个字符用16位2进制数标识。但是通常都用4位的16进制数标识。

例如:

1)中文字符串"你好"的unicode码为:\u60\u597d;

2)英文字符串"ab"的unicode码为:\u0061\u0062;

其中\u是标识unicode码用的,后面的4位16进制数则是对应字符的unicode码。

unicode码在J2EE项目中应用广泛,java对unicode码提供了很好的支持。例如国际化,则是unicode的经典运用。

javaunicode java中Unicode到底是什么啊

那么unicode的编码规则具体是什么,如何用程序实现?

1、unicode编码规则

unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,

如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u"即可。

2、转码程序

javaunicode java中Unicode到底是什么啊

1)字符串转unicode

/**

*将字符串转成unicode

*@param str待转字符串

*@return unicode字符串

*/

public String convert(String str)

{

str=(str== null?"": str);

String tmp;

StringBuffer sb= new StringBuffer(1000);

char c;

int i, j;

sb.setLength(0);

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

{

c= str.charAt(i);

sb.append("\\u");

j=(c>>>8);//取出高8位

tmp= Integer.toHexString(j);

if(tmp.length()== 1)

sb.append("0");

sb.append(tmp);

j=(c& 0xFF);//取出低8位

tmp= Integer.toHexString(j);

if(tmp.length()== 1)

sb.append("0");

sb.append(tmp);

}

return(new String(sb));

}

2)unicode转成字符串,与上述过程反向操作即可

/**

*将unicode字符串

*@param str待转字符串

*@return普通字符串

*/

public String revert(String str)

{

str=(str== null?"": str);

if(str.indexOf("\\u")==-1)//如果不是unicode码则原样返回

return str;

StringBuffer sb= new StringBuffer(1000);

for(int i= 0; i< str.length()- 6;)

{

String strTemp= str.substring(i, i+ 6);

String value= strTemp.substring(2);

int c= 0;

for(int j= 0; j< value.length(); j++)

{

char tempChar= value.charAt(j);

int t= 0;

switch(tempChar)

{

case'a':

t= 10;

break;

case'b':

t= 11;

break;

case'c':

t= 12;

break;

case'd':

t= 13;

break;

case'e':

t= 14;

break;

case'f':

t= 15;

break;

default:

t= tempChar- 48;

break;

}

c+= t*((int) Math.pow(16,(value.length()- j- 1)));

}

sb.append((char) c);

i= i+ 6;

}

return sb.toString();

}

java使用unicode为默认编码是什么意思

java初学者都会接触到一个概念,既java的默认编码是uincode,但书上也就出现这句话而已,究竟是什么意思就没再说。其实对于一个程序员来说,一个平台的编码方式是不用了解的,因为这是他内部处理字符的方式,和我们顶层设计程序是没有多大关系(如果真要说有关系的话,一个就是你对这个平台的熟悉程度,另一个就只能是你要处理的字符奇葩到要考虑编译器有没有包括这个字符)。但这并不是指我们在编程的时候完全不用考虑编码问题,恰恰相反,编码问题是跨系统交流的基本。

那java哪里会用到编码问题呢?最常见的是流,下面有两个例子。1.在linux下用java创建了一个文件(这里默认代码里没有指定编码),里面包括英文和中文,然后在windows下同样用java读取这个文件,并输出,结果中文出现了乱码;2.android手机和电脑的两个java程序进行类似qq的信息交流,中文都是乱码。疑惑来了,java不是跨平台吗,而且默认编码就是unicode,为什么会有编码?正如上面所说,java的系统编码是管理内部变量等信息的,是统一不能变的,但上面两个例子出现乱码的原因在于这些字符信息是从外界读取的,编码方式直接影响到字符的显示,比如gbk一个字符是1或2个字节,中文是2个,而utf8是1到4个字节不定,中文是3个,utf16是2个字节固定不变,所以很明显了,同样字节数的源信息可以每2个或者每3个字节表达一个中文,不同编码当然不同了,而且即使gbk和utf16都是两个字节表示一个中文,同样的二进制也对应不同的字符。所以从外部读取到这些byte信息后,就要指定编码,比如new

String(byte[],charset),当然,也可以在构建流的时候就指定,像new

InputStreamReader(InputStream,charset)等,但像BufferedReader等没有相应的构造函数,就只能把上面的InputStreamReader作为参数了。

1.String和流(包括控制台的输出输入)的默认编码是根据系统而定,即jvm假设这些信息是当前系统创建的,windows默认中文是gbk,linux和mac是utf8(这里又来了,utf8和unicode是什么意思,简单地说,unicode是把每个字符和一个唯一的二进制码对应的标准,而utf是unicode

transformation

format,即如何表示每个唯一的二进制码,utf8,utf16和utf32是不同的编码方式);

2.IDE设置的编码方式用于存取java源文件,对于在不同系统平台上共享代码很重要;

3.java编译器采用utf8,即class文件的存储是用utf8,因为相对于utf16,utf8在处理英文占用内存小,而程序大部分都是英文;

4.jvm运行时的编码方式是utf16,即jvm用utf8从class文件读取程序后再转化为utf16编码的字符串,因为utf16是2个字节,统一的长度更方便jvm申请数组等操作;

5.网页大部分是用utf8编码的,在html头几行有charset的信息,在对下载下来的网页进行解析时,要注意编码,谷歌百度在对搜索结果的解析时也是用utf8的,所以在涉及到网络时编码问题非常重要,本人曾经栽得很惨,当然了,谁叫windows的编码不是utf8;

6.不知大家有没有经历过,如果编码弄错了,一般只有中文会出现乱码,而中文后面的英文是正确的,不合理啊,这不是类似多骨诺米牌吗,一个错了,后面不是全倒吗。所以别小看那些制定编码的专家,像utf8每个字节的前几位都用来表示一些信息,不同字节还不一样,而utf16也有,所以弄出了utf16le和utf16be

java字符串中的“\u”是什么意思

\u是转义字符,表示后面跟一个十六进制数,通过这个十六进制数来指定一个字符,face这样看着好容易误导,其实就是一个十六进制数而已转换成十进制就是64206。

0xface是在表示整形的时候这样使用,比如int a= 0xface,而这儿,是表示一个字符,因为在java以及其他很多语言中,都是用反斜杠来表示转义字符。用\是表示后面是转移字符,用u是unicode的缩写,表示后面是一个unicode字符。其实只是写法问题。

扩展资料

字符串之所以特殊,是因为java会在内容中为String类型的对像开辟一个空间,叫串池,字符串对象的创建之后会被放入到串池中。串池有一个特点,就是对于相同对象,池中只存储一份。

String a="abc";和String b="abc"对于这样的类型的声明方式(不是new出来的)串池把他们看做一个对象,所以池中只存储一分,只是有a和b两个引用罢了!对于String只要用new关键字new出来的string,都是单独的一个对象。

java中Unicode到底是什么啊

UNICODE和ASCII是一个意思只不过他们在对字符进行表达的时候长度不同 ASCII是美国编码 UNICODE是统一编码, UNICODE其实就是ASCII的扩充,因为互谅网的发展ASCII无法满足(因为ASCII是单字节的,容量有限)全世界的各种字符,因此要更大的更统一的编码,于是出现了 UNICODE。说白了就是的设计缺陷。等以后发现外星人了,估计还要宇宙统一代码呵呵

感谢您的阅读!希望本文对解决您关于javaunicode和java中Unicode到底是什么啊的问题有所帮助。如果您还有其他疑问,欢迎随时向我们提问。

vb.net(vb和vb.net的区别和特点) javaapplet JAVA中的applet是什么