Java编程语言中的编码
请看。第16页第3.2节说明 Java编程语言以16位代码单元的序列表示文本, 使用UTF-16编码 我反汇编了一个hello world程序Java编程语言中的编码,java,encoding,Java,Encoding,请看。第16页第3.2节说明 Java编程语言以16位代码单元的序列表示文本, 使用UTF-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
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
{
...
Classfile/c:/Work/SR1/e2/tmp/Y.class
最后修改日期:2014年1月5日;大小240字节
MD5校验和96694fda4f346a62d5412c56dc36c45d
从“X.java”编译而来
Y类
源文件:“X.java”
次要版本:0
主要版本:52
旗帜:ACC_SUPER
固定池:
#1=等级#2//Y
#2=Utf8 Y
#3=类#4//java/lang/Object
#4=Utf8 java/lang/Object
#5=Utf8你好
#6=Utf8 Ljava/lang/String;
#7=Utf8
#8=Utf8()V
#9=Utf8代码
#10=Methodref#3.#11//java/lang/Object.“:()V
#11=名称和类型#7:#8/“”:()V
#12=字符串#5//您好
#13=Fieldref#1.#14//Y.hello:Ljava/lang/String;
#14=名称和类型#5:#6//hello:Ljava/lang/String;
#15=Utf8行号表
#16=Utf8源文件
#17=Utf8 X.java
{
...
我只看到Utf8编码,没有Utf16。为什么没有Utf16编码
谢谢在正在执行的程序中,文本(通常是1)用UTF-16表示 但在“.class”文件中,常量池中的文本(即字符串文本、标识符等)用UTF-8编码以节省空间。(UTF-8中常量池条目的编码由…强制执行,与默认字符集无关。) 加载类文件时,类加载器将UTF-8常量池条目转换为UTF-16
1-可以编写应用程序以多种不同的方式对文本进行编码。我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案;也就是说,当您在执行程序中将文本存储为
字符串
或字符序列
的任何其他子类型时,文本是(通常为1)以UTF-16表示
但在“.class”文件中,常量池中的文本(即字符串文本、标识符等)用UTF-8编码以节省空间。(UTF-8中常量池条目的编码由…强制执行,与默认字符集无关。)
加载类文件时,类加载器将UTF-8常量池条目转换为UTF-16
1-可以编写应用程序以多种不同的方式对文本进行编码。我们在这里讨论的UTF-16编码是Java中文本数据的自然编码方案;即,当您将文本存储为
字符串
或字符序列
的任何其他子类型时所得到的编码,因为……您的字符集是UTF8tring内部保存着16位代码点。在字符串常量中输入一些汉字,然后查看它的反编译结果如何电 在文本文件中?因为…您的字符集是UTF8。字符串内部包含16位代码点。在字符串常量中键入一些中文字符,然后查看它分解为什么内容。如何放置电 在文本文件中?在类文件的常量池中,字符串也没有其他编码:@Charlie-correct.(我假设您指的是Brian Roach的误导性评论…)是的。我还认为,既然问题引用了JLS规范,那么最好提供一个指向JVM规范相关部分的链接。谢谢,我已经合并了这一部分。在类文件的常量池中,字符串也没有其他编码:@Charlie-correct。(我想你指的是Brian Roach的误导性评论…)是的。我还认为,既然问题引用了JLS规范,那么最好提供一个到JVM规范相关部分的链接。谢谢,我已经合并了这个。