关闭

JAVA中的字符编码操作

发表于:2013-12-24 10:58

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:IT农夫    来源:51Testing软件测试网采编

  在JAVA源文件-->JAVAC编译-->Class-->Java运行-->getBytes()-->newString()-->显示的过程中,
  每一步都有编码的转换过程,这个过程总是存在的,只是有的时候用默认的参数进行。
  在编写JAVA源文件的时候要指定源文件的编码,这里是指源文件的文本以什么编码保存为操作系统中的文件。
  JAVAC编译的时候要把源文件编译成class文件,先要读取源文件,这时候要以一种编码来解码读到的
  文件,可以通过javac -encoding来指定,如果不指定则用系统默认编码。同时以unicode编码来生成class文件。
  比如有一个java文件Test.java中定义了一个 String str="中文";,
  然后源文件用utf-8保存,Test.java文件中"中文"的二进制
  则为utf-8形式(-28 -72 -83 -26 -106 -121),这时候通过javac编译的时候
  javac -encoding utf-8 Test.java,按照utf-8编码读入Test.java这个文件,编译成unicode编码的
  class文件,"中文"的二进制则为unicode形式(78 45 101 -121)。
  然后运行过程中,"中文"的二进制为unicode形式(78 45 101 -121),默认输入和输出的都是操作系统的默认编码。
  如果这时候运行str.getBytes(),没有指定编码,得到的bytes是由unicode转成系统默认编码,
  如果指定编码,如str.getBytes("utf-8"),则由unicode转成utf-8.
  new String(bytes[,encode])执行的时候,如果不指定编码,用操作系统的默认编码识别
  bytes,如果指定编码,则用指定的编码识别bytes。得到的string在Java中仍然以unicode存在。
  如果后面需要String.getBytes([encode]),系统要做一个Unicode字符-->encode字符-->bytes的转换。
31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号