java编码转换

        在编程时必须面对的问题之一就是编码之后出现乱码,这个时候如果不能实现编码正常化,最常出现乱码的是String,char,byte三者之间的转化,但是实际上对于这三者其实有实现转化的程序,这里只是写出关键的程序代码段。

        1、String转char[],代码段char[] ch=String.toCharArray()。2、String转byte[],代码段byte[] bt=String.getByte(“代码格式”)。3、char转byte。两者都是一个字节,char c=(char)byte。4、String str=new String(char[])。5、String str=new String(byte[],"代码格式")。

        同时注意,java平台的默认编码格式是GBK,这点可以从菜单的run-Run Configuration-common-encoding看到,当然可以在这里设置编码格式。GBK是本地码,UTF是国际码。


        java本身是Big Endian的,而C#,intel系统则是Little Endian的,当我们读取文件时应该根据文件的编码格式进行读取,然后根据文件的编码格式输出,但实际上我们读取C#文件时,使用的是UTF-16LE,而输出使用的是UTF-16,而不是UTF-16LE,UTF-16BE,这点稍微有点奇怪(但是若使用String str=new Stirng(byte[ ],“UTF-16LE”),System.out.println(str)则输出的XML内容是正确的,而使用UTF-16反而得到错误答案,这点需要注意!)。但是这点跟java虚拟机的运行有关,因为实际上网络平台是Big Endian的,所以我们可以不用转化而直接读取,而intel平台的则是Little Endian的,所以其实从intel平台到java虚拟机其实有自动转化的过程,使我们读取文件时看起来就好像读文件是从头读到位的,而并没有看出LE或者BE的区别。总的来说,就是网络,主机的字节序都是java虚拟机自动转好的,以使我们读文件时不用管字节序的LE,BE。

        至于为什么读取时是UTF-16LE,输出时对应UTF-16LE,但是输出到文件时却是UTF-16。这点应该是因为java虚拟机会进行自动转化,而更重要的是,若使用UTF-16LE,生成的文件的property并不会自动转换为UTF-16LE,而使用UTF-16则可以自动转化为UTF-16,而UTF-16,本身包含UTF-16LE,UTF-16BE,所以使用UTF-16,而非UTF-16LE。总的来说,系统输出流的编码格式会按照程序的编码格式进行编码格式设置。(但是有的编码格式系统不会自动设置,就像输出到XML文件的UTF-16LE,就只能设置为UTF-16。)

        最关键的一点就是,字节流是不需要编码的,因为字节流传递的是数据。只有字符才需要编码,因为实际上字符是系统根据数据粘贴文字图片,所以需要编码,不然系统就会见他看成字节数据(实际上字符流也是字节流的一种)。总的来说,就是操作基础是字节流,但是这里分为字节流和字符流,只有字符的才是需要编码的。



(未完成)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值