浅谈Java中的编码理论
来源:互联网 发布:网站权重优化 编辑:程序博客网 时间:2024/05/14 15:13
Java是使用Unicode字符集的,意思是在内存运行的时候是这样的。当Java源程序被编译为.class文件的时候,是以UTF-8字符集存储字符的。比如字符串"汉语"的Unicode字符为:0x496CED 8B。在.class文件中则变成了:0xE6 B1 89 E8 AF AD0D0A。实际上如果用以下程序输出“汉语”二个字的16进制字节序列:
String str = "汉语"; trybyte b = str.getBytes("Unicode");for(int i:b)System.out.println(Integer.toHexString(i));catch(Exceptionex)ex.printStackTrace();
会发现,实际输出的是 0xFE FF 6C 49 8B ED。多出来的0xFEFF,是Unicode字符串的BOM(ByteOrder Mark)。但是为什么输出的顺序(0xFE FF 6C 49 8BED)和文件中的顺序不一致(0xFF FE 49 6CED 8B)?
public byte getBytes(Charset charset) 使用指定的字符集将此String解码为字节序列,并将结果存储到一个新的字节数组中。如果不指定参数,则使用系统默认的字符集,对于简体中文系统一般为GBK。
看程序:
class EncodingExer public static void main(String args) Stringstr= "汉语";//GBK编码为: 0xBABA 0xD3EFbyte b = str.getBytes(); for(inti :b)System.out.println(Integer.toHexString(i)); //0xBA 0xBA0xD30xEF
在这个过程中,由Unicode字符得到字符串“汉语”,然后解码得到了GBK字节序列。与String.getBytes()相对应的是newString(bytebytes,Charsetcharset),它的作用是用字节序列生成字符串。如果想由刚才的GBK字节序列得到原来的字符串“汉语”,我们需要做的是:newString(b)就可以了。将b按照GBK编码得到字符串“汉语”,然后转化为Unicode字符。如果是str.getBytes("iso-8859-1"),那么还原的时候就是newString(b,"iso-8859-1")。总之就是用什么方式编码,就用什么方式解码。
- 浅谈Java中的编码理论
- 浅谈网页设计中的色彩理论
- 浅谈网页设计中的色彩理论
- “破窗理论”在编码中的体现
- 浅谈Java的输入输出编码
- 浅谈GIS在"4P理论"中的应用
- 浅谈java中的引用
- 浅谈java中的数组
- 浅谈java中的代理
- 浅谈java中的volatile
- Java中的Serializable浅谈
- 浅谈Java中的static
- 浅谈java中的return
- 浅谈java中的堆栈
- 浅谈Java中的锁
- 浅谈Java中的异常
- 浅谈java中的static
- 浅谈Java中的多线程
- IE和Firefox之间的JavaScript差异
- Apache2.2.11和SVN1.6.1搭建svn版本控制平台(windows环境)(1)
- 中国年历算法
- 8个小习惯让你每天瘦1斤
- 兼职
- 浅谈Java中的编码理论
- MySQL数据库优化--SQL
- 不用额外空间,交换两个数的值.
- 如何打包部署WinForm 应用程序
- Java解析网络数据流的三种特殊方法
- Nebula3中的骨骼动画: Animation子系统
- VC++网络编程的疑惑
- Mysql Explain 详解
- ActionServlet