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. 区分字符集和字体
有些时候,乱码是因为字体显示不正确造成的,这个赖不上字符集。
表象上:字体造成的乱码,一般表现为豆腐块,字符集表现为 问号。
分享到:
相关推荐
1. **代码生成**:当你的GraphQL schema发生变化时,graphql-java-codegen-maven-plugin能够自动更新Java模型类、数据传输对象(DTOs)以及GraphQL客户端的查询和变异操作。这减少了手动编写和维护这些代码的工作量...
Java Emoji Converter(Emoji表情转换工具) Emoji转换工具,适合各种规格客户端生成的Emoji字符串转换成另外一种格式。 一种在每种类型之间转换表情符号字符串的工具,例如软银行表情符号,unicode表情符号,别名...
1. **编程语言**:根据源码的类型,可能是C++、Java、Python、JavaScript或其他语言,需要熟悉相应的语法和编程习惯。 2. **软件架构**:理解DIY X7的整体设计,包括模块划分、数据流、控制流程等。 3. **GBK编码...
动态网站篇深入讲解Servlet、JSP、JavaBean、JDBC数据库连接、数据库连接池等Java Web开发的核心技术。系统框架篇则是以架构设计的高度,讲解搭建网站的三大框架Struts、Hibernate、Sprin9及标签库。项目实战篇详细...
Spring MVC教程 教程学习: 本教程完整地讲解了Spring MVC的每个知识点,包括独立运行的Demo示例,欢迎一起交流学习。Java学习交流群:239126529 教程软件版本说明: ...Spring MVC Post中文乱码 @RequestPara
由于文件内容的具体部分没有提供有效的文字信息,而是呈现了一系列的乱码,因此无法直接从中抽取知识点。因此,我将根据标题和描述信息,以及可预测的内容结构,构建一个大致的知识框架,关于《电脑报》一般会包含的...
在技术层面上,"Utf-8"标识意味着该插件采用了Unicode的UTF-8编码格式,这是目前互联网上最广泛使用的字符编码标准,确保了在不同语言环境下都能正确显示文字,避免了乱码问题,对全球化网站尤其友好。 该插件的...
在Java编程语言中,编码测试尤为重要,因为Java的默认编码可能会因操作系统而异,这可能导致编码问题,如乱码或数据丢失。 首先,我们需要理解编码的概念。编码是将字符(如字母、数字和符号)转换为二进制数字的...
2. **编码(File Encodings)**:控制项目的字符编码,确保在不同系统间传输文件时不会出现乱码问题。 3. **编辑器(Editor)**:包含字体、颜色方案、自动完成、行号显示、代码折叠等设置。 4. **快捷键(Keymap...