java处理unicode字符
java中可以使用char类提供的charAt()方法来获得字符的unicode的编码值,示例如下:
扩展资料:
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
参考资料:百度百科-java
字节码序列:47 114 101 115 47 103 97 109 101 47 50 48 48 52 47
表示的字符串应该是“/res/game/2004/”
在Java/C#中,将字符串转换为字节数组时,为了与其他语言兼容,一般应该将一个中文字符转换为2个字节。常见的地方:使用.NET发布Web Service,客户端使用Java访问Web Service,这里就要注意解码和编码的问题了,应该使用同一种字符集编码,否则读取会出现所谓的“中文乱码”。
再来一组测试:
public class Test30 {
public static void main(String[] args) throws Exception {
String source = "i我";
byte[] arr;
int i;
//按Java平台默认的字符集解码
arr = source.getBytes();
System.out.printf("%15s", "default : ");
for(i=0; i<arr.length; i++){
System.out.printf("%X " , arr[i]);
}
System.out.println();
//按GBK(中文平台的默认字符集)字符集解码
arr = source.getBytes("GBK");
System.out.printf("%15s", "GBK : ");
for(i=0; i<arr.length; i++){
System.out.printf("%X " , arr[i]);
}
System.out.println();
//按utf-8字符集解码
arr = source.getBytes("utf-8");
System.out.printf("%15s", "utf-8 : ");
for(i=0; i<arr.length; i++){
System.out.printf("%X " , arr[i]);
}
System.out.println();
//按utf-16字符集解码
arr = source.getBytes("utf-16");
System.out.printf("%15s", "utf-16 : ");
for(i=0; i<arr.length; i++){
System.out.printf("%X " , arr[i]);
}
System.out.println();
//按ISO-8859-1(ASCII字符集的扩展,0~255)字符集解码
arr = source.getBytes("ISO-8859-1");
System.out.printf("%15s", "ISO-8859-1 : ");
for(i=0; i<arr.length; i++){
System.out.printf("%X " , arr[i]);
}
System.out.println();
}
}
测试结果:
default : 69 CE D2
GBK : 69 CE D2
utf-8 : 69 E6 88 91
utf-16 : FE FF 0 69 62 11
ISO-8859-1 : 69 3F
分析:原来GBK(还有gb2312)字符集的解码结果和Java平台的解码结果完全一致,这不是偶然,因为我的测试平台是Windowx中文平台,GBK是Java中文平台的默认字符集,一个汉字解码成为2个字节,1个字符转换为1个字节。
解决方案:如果多种语言之间需要进行编码、解码,对汉字应该按双字节处理,目前绝大多数语言都支持这种解码方案,针对Java语言,采用默认的字符集(或显示使用GBK或gb2312字符集)就可以了。
扩展:C#的默认字符集不是GBK,即使所处环境是中文平台。
例如:
1)中文字符串"你好"的unicode码为:\u60\u597d;
2)英文字符串"ab"的unicode码为:\u0061\u0062;
其中\u是标识unicode码用的,后面的4位16进制数则是对应字符的unicode码。
unicode码在J2EE项目中应用广泛,java对unicode码提供了很好的支持。例如国际化,则是unicode的经典运用。
那么unicode的编码规则具体是什么,如何用程序实现?
1、unicode编码规则
unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,
如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u" 即可。
2、转码程序
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();
}
只能一个个处理:
char[] charArray = new char[shortArray.length];
for (int i=0;i<shortArray.length; i++) {
charArray[i] = (char)shortArray[i];
}
String str = new String(charArray);
不过为什么要用short来存unicode字符?java的char本身就是无符号的,用于保存unicode字符的,相当于C中的w_char,而不仅仅只有0~255而已。
所以用short数组来保存字符根本就是错误的。
short是16位,char也是16位,这个不大可能会有问题吧,况且符号位只有一位,值只能是0或1,即使是这样,也根本不会影响到char的取值,你最好把代码发过来,我可以帮你看看
写了一个程序证明我的推断,结果表明是没有问题的,用short存unicode
String a = "用户名或密码错误";
char[] b = a.toCharArray();
short[] c = new short[b.length];
for(int i=0;i<b.length;i++)
{
c[i] = (short)b[i];
}
char[] d = new char[b.length];
for(int i=0;i<c.length;i++)
{
d[i] = (char)c[i];
}
short太短了,unicode码太长,你应该用int数组来存,就没有问题了
真蓝惠尔: unicode编码简而言之就是将每一个字符用16位2进制数标识.但是通常都用4位的16进制数标识. 例如: 1)中文字符串"你好"的unicode码为:\u60\u597d; 2)英文字符串"ab"的unicode码为:\u0061\u0062; 其中\u是标识unicode码用的...
叶城县13115716278: java中如何获得一个字符的unicode编码 - ?
真蓝惠尔: java中可以使用char类提供的charAt()方法来获得字符的unicode的编码值,示例如下:public static String getUnicode(String source){ String returnUniCode=null; String uniCodeTemp=null; for(int i=0;i<source.length();i++){ uniCodeTemp = "\\u...
叶城县13115716278: 如果用java输出unicode编码代表的字符 - ?
真蓝惠尔: public class CharT {public static void main(String[] args) {//toChars(int codePoint)String str = "\u554A";//啊 字的unicodeint codePoint = Integer.parseInt("554A",16);char[] chs = Character.toChars(codePoint);System.out.println(chs[0]);} }应该是你要的答案吧...
叶城县13115716278: 用java如何把unicode码转成汉字? - ?
真蓝惠尔: java中将unicode码转换成汉字的方式是直接使用string类型,打印即可:1 2String ascii="\u4f01\u4e1a";//这两du个unicode码就是企业的 System.out.println(ascii);//打印出zhi来 运行结果:企业 Unicode只有一个字符集,中、日、韩的三...
叶城县13115716278: 在JAVA输入一个数字 输出他在Unicode表中对应的字符 - ?
真蓝惠尔: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class UnicodeDemo { public static void main(String[] args) throws IOException { //String s="sdjakjdkl";//键盘录入while(true){...
叶城县13115716278: 用java如何把unicode码转成汉字??
真蓝惠尔: Java中字符和字符串都采用的是Unicode编码;汉字能够直接表示;不需要转换 可以测试一下 public class Unicode2Chz { public static void main(String[] args) { System.out.print(cc);}}直接输出:保
叶城县13115716278: java程序输出Unicode码?
真蓝惠尔: 额 你真不友好啊 别人帮你你还骂 String string = "\u000"+i; 换成单引号试试 你用字符串加整形了 字符串与字符创的拼接用+号 for (int i = 0x0000; i <10 ; i++) { int string = '\u000'+i; System.out.println(string); }
叶城县13115716278: JAVA编程 Unicode码是什么 - ?
真蓝惠尔: Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码.它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求. Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案.Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位.码位就是可以分配给字符的数字.
叶城县13115716278: 在java中如何输入unicode码出字符,有没有方法,\ 一定不行,因为unicode 码是变量 - ?
真蓝惠尔: import java.util.Scanner;public class test_unicode { public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入unicode码\n例如:\\u5b57\\u7b26");String inStr = sc.nextLine();System.out....
叶城县13115716278: java怎么把汉字转化成unicode编码 - ?
真蓝惠尔: 中文转换成Unicode编码和Unicode编码转换成中文 import java.util.Properties; public class Test {public static void main(String[] args) {String s = "简介";String tt = gbEncoding(s); // String tt1 = "你好";System.out.println(decodeUnicode(...