1. 四个涉及编码的环节
java开发中的乱码问题,有4个环节:
1. java文件的编码。
2. class文件的编码。
3. jvm中的字符串编码。
4. 外部资源的编码。
2. java 文件的编码
java文件是可以指定编码的,默认是系统编码,如果GBK。
public static void main(String[] args) {
String s = "汉";
System.out.println(s);
}
文件以GBK保存。只要我们以 GBK打开文件,汉字部分就正常显示。
结论:java源文件可以任意编码
3. class 文件编码
当 java文件编译成class时候,进行了一次编码转换。这里的例子是 GBK 到UTF8
也就是说 class文件是以UTF8格式保存的。
所以以UTF8打开这个class,我们能够看到这样的字符串:
“([Ljava/lang/String;)V 汉”
当然,有些字符不能正确显示,需要以HEX查看。
结论:class文件是UTF8编码
4. jvm中的字符串编码。
jvm中的字符串是 unicode的,或者叫 UTF16。(下面证据不太直接。)
String s1 = "汉";
String s2 = "お";
System.out.println(Integer.toString(s1.charAt(0), 16));
System.out.println(Integer.toString(s2.charAt(0), 16));
System.out.println(s1+s2);
5. 外部资源的编码
主要是各种可以和外部产生联系的输入和输出。
如,System.out/err/in这些是流,外部存在的文件(读入或写出)
System.out/err/in,默认使用系统编码集。
如,export LANG=en_US.UTF8
外部文件,在read或write时,指定合适的编码即可。
6. 字符集转换
字符集的转换很多时候会丢失信息,从而产生乱码。
因此,一定要有正确的编码集使字符串变为正确的unicode。
大家经常看到这样的东西:new String(input.getBytes("ISO-8859-1"), "GBK")
发生了一下事情。
1) String(GBK) -->byte[](ISO-8859-1) -->JVM(UTF16) 这里是乱码
2) JVM(UTF16) -->byte[](ISO-8859-1) -->byte[GBK]-->JVM(UTF16) 这里转回来了。
如果是 String(GBK) -->byte[](GBK) -->JVM(UTF16), 那么就不会有乱码了。
7. 区分字符集和字体
有些时候,乱码是因为字体显示不正确造成的,这个赖不上字符集。
表象上:字体造成的乱码,一般表现为豆腐块,字符集表现为 问号。
分享到:
相关推荐
Java 乱码问题一直是开发过程中常见的困扰之一,它涉及到字符编码的理解、文件编码的设定以及网络传输中的编码处理。本文将深入探讨Java编程中的乱码现象,并提供一系列的解决策略。 首先,我们要理解两个基本概念...
解决java web开发中遇到的前后台传值乱码问题。
在Java开发过程中,字符编码问题常常困扰着开发者,尤其是在处理中文等多字节字符时,乱码问题尤为突出。本文将深入探讨Java乱码的根源,并提供一系列实用的解决方案,帮助开发者有效应对这一挑战。 ### Java乱码...
Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...
在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...
java乱码解决方案,在使用eclipse时出现的乱码问题,帮助解决
java 乱码 转换 utf
JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...
Java 乱码问题是 Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及...
### Java中文乱码处理 #### 一、Java中文问题的由来 Java作为一种跨平台的编程语言,其内部实现和class文件均基于Unicode编码,这为Java程序带来了优秀的跨平台特性。然而,这也同时带来了一些关于中文乱码的问题...
在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...
在Java开发中,遇到中文乱码问题是一种常见的挑战,特别是在处理URL时。URL中文乱码问题主要是由于URL编码和解码过程中的不一致导致的。下面将详细介绍如何解决这个问题,并探讨几种常用的方法。 首先,我们需要...
### Java乱码问题详解与解决方案 #### 一、问题背景 在Java开发过程中,尤其是在处理中文字符时,经常遇到字符编码不一致导致的乱码问题。由于Java默认使用Unicode编码,而在中国大陆地区,常见的字符集为GB2312...
### Java获取乱码问题解析与解决方案 在Java应用开发过程中,字符编码问题一直是困扰开发者的一大难题,尤其是在处理HTTP请求中的中文或特殊字符时,经常会出现乱码现象。本文将详细介绍如何通过修改`server.xml`...
Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码的不一致,即不同环节采用的字符编码标准不统一。本文将深入探讨这一问题,并提供相应的解决方案。 首先,...
java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 的问题 java aspose java aspose word 上传到服务器 导出的word 中文字体乱码 ...
在Java编程过程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。本篇文章将全面解析Java中的乱码处理方法,涵盖纯Java代码、Servlet、JSP以及EJB类的解决方案,帮助开发者有效解决这一问题。 首先,理解...
- 编译:我们用 javac 编译 Java 文件时,javac 不会智能到猜出你所要编译的文件是什么编码类型的,所以它需要指定读取文件所用的编码类型。默认 javac 使用平台缺省的字符编码类型来解析 Java 文件。平台缺省编码是...
Java开发乱码问题解决方法汇总 Java开发中乱码问题是非常常见的问题之一,而解决这些问题需要具备一定的技术知识和经验。在本文中,我们将总结一些常见的Java开发乱码问题解决方法,希望能够为读者提供帮助。 1. ...