源文件(Main.java)保存字符集
/**
* 本类测试字符集编码的转换问题
*/
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello World!,你好!");
}
}
window 2003 简体中文环境
1. 以ANSI编码(实际上用操作系统默认编码-gbk)保存,如下:
00000000h: 2F 2A 2A 0D 0A 20 2A 20 B1 BE C0 E0 B2 E2 CA D4 ; /**.. * 本类测试
00000010h: D7 D6 B7 FB BC AF B1 E0 C2 EB B5 C4 D7 AA BB BB ; 字符集编码的转换
00000020h: CE CA CC E2 0D 0A 20 2A 2F 0D 0A 70 75 62 6C 69 ; 问题.. */..publi
00000030h: 63 20 63 6C 61 73 73 20 4D 61 69 6E 0D 0A 7B 0D ; c class Main..{.
00000040h: 0A 09 70 75 62 6C 69 63 20 73 74 61 74 69 63 20 ; ..public static
00000050h: 76 6F 69 64 20 6D 61 69 6E 28 53 74 72 69 6E 67 ; void main(String
00000060h: 5B 5D 20 61 72 67 73 29 20 0D 0A 09 7B 0D 0A 09 ; [] args) ...{...
00000070h: 09 53 79 73 74 65 6D 2E 6F 75 74 2E 70 72 69 6E ; .System.out.prin
00000080h: 74 6C 6E 28 22 48 65 6C 6C 6F 20 57 6F 72 6C 64 ; tln("Hello World
00000090h: 21 2C C4 E3 BA C3 A3 A1 22 29 3B 0D 0A 09 7D 0D ; !,你好!");...}.
000000a0h: 0A 7D 0D 0A ; .}..
1)在当前环境下,运行javac *。java ,成功。
00000000h: CA FE BA BE 00 00 00 32 00 1D 0A 00 06 00 0F 09 ; 漱壕...2........
00000010h: 00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07 ; ................
00000020h: 00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 ; .....<init>...()
00000030h: 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E ; V...Code...LineN
00000040h: 75 6D 62 65 72 54 61 62 6C 65 01 00 04 6D 61 69 ; umberTable...mai
00000050h: 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 ; n...([Ljava/lang
00000060h: 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 ; /String;)V...Sou
00000070h: 72 63 65 46 69 6C 65 01 00 09 4D 61 69 6E 2E 6A ; rceFile...Main.j
00000080h: 61 76 61 0C 00 07 00 08 07 00 17 0C 00 18 00 19 ; ava.............
00000090h: 01 00 16 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 2C ; ...Hello World!,
000000a0h: E4 BD A0 E5 A5 BD EF BC 81 07 00 1A 0C 00 1B 00 ; 浣犲ソ锛?......
000000b0h: 1C 01 00 04 4D 61 69 6E 01 00 10 6A 61 76 61 2F ; ....Main...java/
000000c0h: 6C 61 6E 67 2F 4F 62 6A 65 63 74 01 00 10 6A 61 ; lang/Object...ja
000000d0h: 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 01 00 ; va/lang/System..
000000e0h: 03 6F 75 74 01 00 15 4C 6A 61 76 61 2F 69 6F 2F ; .out...Ljava/io/
000000f0h: 50 72 69 6E 74 53 74 72 65 61 6D 3B 01 00 13 6A ; PrintStream;...j
00000100h: 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 ; ava/io/PrintStre
00000110h: 61 6D 01 00 07 70 72 69 6E 74 6C 6E 01 00 15 28 ; am...println...(
00000120h: 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E ; Ljava/lang/Strin
00000130h: 67 3B 29 56 00 21 00 05 00 06 00 00 00 00 00 02 ; g;)V.!..........
00000140h: 00 01 00 07 00 08 00 01 00 09 00 00 00 1D 00 01 ; ................
00000150h: 00 01 00 00 00 05 2A B7 00 01 B1 00 00 00 01 00 ; ......*?.?....
00000160h: 0A 00 00 00 06 00 01 00 00 00 04 00 09 00 0B 00 ; ................
00000170h: 0C 00 01 00 09 00 00 00 25 00 02 00 01 00 00 00 ; ........%.......
00000180h: 09 B2 00 02 12 03 B6 00 04 B1 00 00 00 01 00 0A ; .?...?.?.....
00000190h: 00 00 00 0A 00 02 00 00 00 08 00 08 00 09 00 01 ; ................
000001a0h: 00 0D 00 00 00 02 00 0E ; ........
2.以UTF-8编码保存java 源文件,如下:
00000000h: 2F 2A 2A 0D 0A 20 2A 20 E6 9C AC E7 B1 BB E6 B5 ; /**.. * 鏈被娴
00000010h: 8B E8 AF 95 E5 AD 97 E7 AC A6 E9 9B 86 E7 BC 96 ; 嬭瘯瀛楃闆嗙紪
00000020h: E7 A0 81 E7 9A 84 E8 BD AC E6 8D A2 E9 97 AE E9 ; 鐮佺殑杞崲闂
00000030h: A2 98 0D 0A 20 2A 2F 0D 0A 70 75 62 6C 69 63 20 ; .. */..public
00000040h: 63 6C 61 73 73 20 4D 61 69 6E 0D 0A 7B 0D 0A 09 ; class Main..{...
00000050h: 70 75 62 6C 69 63 20 73 74 61 74 69 63 20 76 6F ; public static vo
00000060h: 69 64 20 6D 61 69 6E 28 53 74 72 69 6E 67 5B 5D ; id main(String[]
00000070h: 20 61 72 67 73 29 20 0D 0A 09 7B 0D 0A 09 09 53 ; args) ...{....S
00000080h: 79 73 74 65 6D 2E 6F 75 74 2E 70 72 69 6E 74 6C ; ystem.out.printl
00000090h: 6E 28 22 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 2C ; n("Hello World!,
000000a0h: E4 BD A0 E5 A5 BD EF BC 81 22 29 3B 0D 0A 09 7D ; 浣犲ソ锛?);...}
000000b0h: 0D 0A 7D 0D
1)在当前环境下,运行javac *。java 报错,如下:
Main.java:8: 警告:编码 GBK 的不可映射字符
System.out.println("Hello World!,浣犲ソ锛?);
分析:javac以读取二进制文件后,以GBK格式解析,出错。
2) 指定javac 的字符集,javac encoding utf-8 *.java ,编译成功,class编码如下:
00000000h: CA FE BA BE 00 00 00 32 00 1D 0A 00 06 00 0F 09 ; 漱壕...2........
00000010h: 00 10 00 11 08 00 12 0A 00 13 00 14 07 00 15 07 ; ................
00000020h: 00 16 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 ; .....<init>...()
00000030h: 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E ; V...Code...LineN
00000040h: 75 6D 62 65 72 54 61 62 6C 65 01 00 04 6D 61 69 ; umberTable...mai
00000050h: 6E 01 00 16 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 ; n...([Ljava/lang
00000060h: 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 ; /String;)V...Sou
00000070h: 72 63 65 46 69 6C 65 01 00 09 4D 61 69 6E 2E 6A ; rceFile...Main.j
00000080h: 61 76 61 0C 00 07 00 08 07 00 17 0C 00 18 00 19 ; ava.............
00000090h: 01 00 16 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 2C ; ...Hello World!,
000000a0h: E4 BD A0 E5 A5 BD EF BC 81 07 00 1A 0C 00 1B 00 ; 浣犲ソ锛?......
000000b0h: 1C 01 00 04 4D 61 69 6E 01 00 10 6A 61 76 61 2F ; ....Main...java/
000000c0h: 6C 61 6E 67 2F 4F 62 6A 65 63 74 01 00 10 6A 61 ; lang/Object...ja
000000d0h: 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 01 00 ; va/lang/System..
000000e0h: 03 6F 75 74 01 00 15 4C 6A 61 76 61 2F 69 6F 2F ; .out...Ljava/io/
000000f0h: 50 72 69 6E 74 53 74 72 65 61 6D 3B 01 00 13 6A ; PrintStream;...j
00000100h: 61 76 61 2F 69 6F 2F 50 72 69 6E 74 53 74 72 65 ; ava/io/PrintStre
00000110h: 61 6D 01 00 07 70 72 69 6E 74 6C 6E 01 00 15 28 ; am...println...(
00000120h: 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E ; Ljava/lang/Strin
00000130h: 67 3B 29 56 00 21 00 05 00 06 00 00 00 00 00 02 ; g;)V.!..........
00000140h: 00 01 00 07 00 08 00 01 00 09 00 00 00 1D 00 01 ; ................
00000150h: 00 01 00 00 00 05 2A B7 00 01 B1 00 00 00 01 00 ; ......*?.?....
00000160h: 0A 00 00 00 06 00 01 00 00 00 04 00 09 00 0B 00 ; ................
00000170h: 0C 00 01 00 09 00 00 00 25 00 02 00 01 00 00 00 ; ........%.......
00000180h: 09 B2 00 02 12 03 B6 00 04 B1 00 00 00 01 00 0A ; .?...?.?.....
00000190h: 00 00 00 0A 00 02 00 00 00 08 00 08 00 09 00 01 ; ................
000001a0h: 00 0D 00 00 00 02 00 0E ; ........
3.结论:经比较class文件的二进制文件完全一致,文件的编码,为指定保存到文件系统中
编码格式,用ANSI格式和UTF-8格式,保存文件系统中的二进制文件,不同;javac编译时,
默认使用操作系统编码系统读取该格式,编译为class文件,class文件的编码格式相同,
采用了UTF-8的编码格式,和操作系统格式无关,保证了java的平台无关性。
4.class 文件中“你好!”不同结果:
第一行:源代码是GBK编码时,通过javac编译为Class文件后,对应的二进制编码;
第二行:源代码是UTF-8编码时,通过javac编译为Class文件后,对应的二进制编码;
第三行:将“你好!”,按照UTF-8字符集标准,转换为二进制后,对应的编码。
000000a0h: E4 BD A0 E5 A5 BD EF BC 81 07 00 1A 0C 00 1B 00 ; 浣犲ソ锛?......
000000a0h: E4 BD A0 E5 A5 BD EF BC 81 07 00 1A 0C 00 1B 00 ; 浣犲ソ锛?......
E4 BD A0 E5 A5 BD EF BC 81
结论:class文件中的字符编码,采用UTF-8编码;class文件格式是jvm自身定义的格式,
即中文用3个字节表示一个字符,英文用一个字节表示。
分享到:
相关推荐
### Java字符集编码问题详解 #### 一、引言 在Java编程中,字符集编码问题是一个常见且重要的议题。由于不同的系统、平台以及网络环境中可能存在多种字符编码格式,这导致了在处理文本数据时可能会遇到编码不一致...
本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,探讨在实际开发中如何运用和处理字符编码问题。 首先,我们需要理解字符集的概念。字符集是一系列符号的集合,例如...
### Java字符集编码乱码详解 #### 一、编码与乱码基础知识 在计算机科学领域,字符集(Character Set)是指一系列符号和电子通信代码的标准集合。每种字符集都有其特定的应用场景和优势。例如,ASCII(American ...
### Java字符集和编码 #### 一、引言 在探讨Java字符集和编码之前,我们先了解一下为什么在Java编程中需要关注字符集和编码。Java作为一种广泛应用的编程语言,其内部采用的是Unicode编码,这使得Java能够很好地...
正确理解和应用不同的字符集编码标准,如ISO8859-1、GB2312/GBK、Unicode和UTF-8,是确保数据在不同系统和平台之间正确传输的基础。在实际开发中,应根据具体需求选择合适的字符集编码,并注意在不同环节保持字符集...
Java字符集与编码问题在编程实践中经常遇到,尤其是在处理中文字符时。Java系统内部以UTF-8编码进行字符串运算,但字符串的初始编码则取决于操作系统的默认编码。这意味着,如果Java程序的输入、输出以及操作系统三...
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理国际化应用时,理解并掌握各种字符编码格式变得尤为重要。下面将介绍几种常见的字符编码格式以及如何在Java中实现...
java 字符集编码转换,时间格式化,数字判断等,java文件
### JAVA字符编码详解:Unicode, ISO-8859-1, GBK, UTF-8 及其相互转换 #### 一、引言 在Java编程中,字符编码的管理和转换是一项基本而又重要的任务。不同的编码标准适用于不同的场景,而理解和掌握这些编码之间...
基本字符集主要包含在Java运行时库`rt.jar`中,涵盖了常见的国际标准和一些特定编码方式。具体包括以下几种: - **ASCII**:即美国信息交换标准代码(American Standard Code for Information Interchange),这是...
因为文件系统可能使用不同的编码,如GBK、ISO-8859-1或UTF-8等。Java的IO系统在此起到了关键作用,它分为面向字节的流(如InputStream和OutputStream)和面向字符的流(如Reader和Writer)。 面向字节的流处理原始...
### 关于JAVA字符编码:Unicode, ISO-8859-1, GBK, UTF-8 编码及相互转换 在Java开发过程中,字符编码是处理文本数据的基础,不同的编码方式会影响数据的存储、传输以及显示。本文将详细介绍几种常见的字符编码...
在Java编程中,正确地处理文件的字符集编码至关重要,特别是在读取或写入含有非ASCII字符(如中文、日文、韩文等)的文件时。`cpdetector`是Java中一个常用的库,用于自动检测文件的字符集编码。这个库能够帮助...
### 字符集编码知识点 #### 一、概述与背景 在Web开发中,字符集编码问题经常成为开发者需要解决的关键技术挑战之一。不同语言、不同系统间的字符编码差异可能导致数据在传输过程中出现乱码等问题。因此,理解字符...
Mysql数据库中的字符集编码问题是许多开发者经常遇到的一个问题,特别是在JAVA项目中。解决这个问题需要从多方面入手,包括服务器、数据库、数据表和连接等四个层次。这篇文章将详细介绍如何解决Mysql数据库乱码问题...
然而,这种方法仅适用于UTF-8的检测,且无法识别其他编码格式,如GBK、ISO-8859-1等。当需要处理各种未知编码格式的文件时,可以借助第三方库cpdetector。 cpdetector是一个轻量级的开源项目,它的大小大约为500KB...
在Java编程语言中,理解和掌握字符集编码是至关重要的,特别是在处理各种文本数据时。本文主要探讨了编码字符集和字符集编码的区别,这对于软件开发人员来说是基础且必要的知识。 首先,我们要区分两个概念:编码...
Java字符集编码应用探讨
字符编码检测和转换 附件中:FileEncodeDetector.java 此文件可以检测指定文件的编码格式 public static String getFileEncode(File file) {...} 附件中:FileCharsetConverter.java 此文件可以实现两个编码的相互...