繁体   English   中英

用Java编程语言进行编码

[英]Encoding in Java Prograaming Language

请参阅JLS7 第3.2节第16页的状态

Java编程语言使用UTF-16编码以16位代码单元的顺序表示文本。

我反汇编了一个hello world程序。

class Y {
String hello = "hello";
}

以下是程序集:

Classfile /c:/Work/SR1/e2/tmp/Y.class
Last modified Jan 5, 2014; size 240 bytes
MD5 checksum 96694fda4f346a62d5412c56dc36c45d
Compiled from "X.java"
class Y
  SourceFile: "X.java"
  minor version: 0
  major version: 52
  flags: ACC_SUPER
  Constant pool:
  #1 = Class              #2             //  Y
  #2 = Utf8               Y
  #3 = Class              #4             //  java/lang/Object
  #4 = Utf8               java/lang/Object
  #5 = Utf8               hello
  #6 = Utf8               Ljava/lang/String;
  #7 = Utf8               <init>
  #8 = Utf8               ()V
  #9 = Utf8               Code
  #10 = Methodref          #3.#11         //  java/lang/Object."<init>":()V
  #11 = NameAndType        #7:#8          //  "<init>":()V
  #12 = String             #5             //  hello
  #13 = Fieldref           #1.#14         //  Y.hello:Ljava/lang/String;
  #14 = NameAndType        #5:#6          //  hello:Ljava/lang/String;
  #15 = Utf8               LineNumberTable
  #16 = Utf8               SourceFile
  #17 = Utf8               X.java
  {
  ...

我只看到Utf8编码,没有看到Utf16。 为什么没有Utf16编码。

谢谢

在执行程序中,文本以UTF-16表示(通常为1 )。

但是在“ .class”文件中,常量池中的文本(即,字符串文字,标识符等)以UTF-8编码以节省空间。 JVM规范-4.4节中规定了UTF-8中常量池条目的编码,与默认字符集无关。)

加载类文件时,类加载器会将UTF-8常量池条目转换为UTF-16。


1-可以编写应用程序以多种方式对文本进行编码。 我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案。 也就是说,当您将文本存储为StringCharacterSequence任何其他子类型时,获得的编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM