- 论坛徽章:
- 0
|
如果你开发过的软件项目中涉及到多语言支持的问题,那么相信你没少碰到过乱码问题,然后在寻求解决问题的途径过程中被一些概念如ASCII, ISO-8859-1, Unicode,UTF-8,GBK,GB2312等等所困扰。本文有助于你正确的理解这些概念。
1. ASCII
用7位编码将英文字符和一些常用的符号存诸为从0到127的数值。
2. ISO-8859-1
法语、西班牙语和德语之类的西欧语言都使用叫做ISO-8859-1的编码系统(也叫做“latin-1”)。它使用7位ASCII字符表示从0到127的字符,但接着扩展到了128-255的范围来表示如n上带有一个波浪线(241),和u上带有两个点(252)的字符等等。可以说ASCII是ISO-8859-1的子集。
3. Unicode
Unicode用一个2字节数字表示每个字符,从0到65535。每个 2 字节数字表示至少在一种世界语言中使用的一个唯一字符。(在多种语言中都使用的字符具有相同的数字码。)这样就确保每个字符一个数字,并且每个数字一个字符。Unicode数据永远不会模棱两可。Unicode使用相同的数字表示ASCII和ISO-8859-1中的字符。只是这两种编码用一个字节表示,而Unicode用两个字节表示。所以Unicode表示这两种编码的字符时只要用低字节就可以了,高字节为0。
4. UTF-8
UTF-8是一种变长的编码方式,每个UTF-8的编码可以是1至6个字节长。它将Unicode编码的字符采用变长的方式进行编码。对Unicode中属于ISO-8859-1的编码采用和ISO-8859-1相同的单字节编码。其他字符采用两字节以上的编码。实际上对于两个字节的Unicode编码,UTF-8只要三个字节即可表示。第一个字节由n个1(1>= 1;
}else
break;
}
if(bCnt =0x80 && c > 6;
hi |= 0xC0;
int lo = c & 0x3F;
lo |= 0x80;
os.write(hi);
os.write(lo);
}else{
int first = c >> 12;
first |= 0xE0;
int second = c >> 6;
second &= 0x3F;
second |= 0x80;
int third = c & 0x3F;
third |= 0x80;
os.write(first);
os.write(second);
os.write(third);
}
}
}
参考:
由一节废电池引起
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100458/showart_2094925.html |
|