解析java程序编译时编码GBK的不可映射字符的错误

本文解析了Java编译时出现编码GBK不可映射字符错误的原因,深入探讨了JDK默认编码格式及其对不同源文件编码的影响。文章提供了两种解决方案,一是通过命令行指定UTF-8编码,二是调整源文件保存编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于java初学者来说,怕的不是没有热情,而是学习中遇到问题无法解决的焦躁。最近,小编在学习java时就遇到了这么一个问题,在编译java源程序的时候出现报错:HelloWorld.java:8: 错误: 编码 GBK 的不可映射字符 (0x80)。这样的错误,对于初学的小编来说久久不能解决,在多次百度学习之后,终于领会了其中的奥秘。

java程序在编译的时候,需要使用JDK开发工具包中的JAVAC.EXE命令,而JDK开发工具包是国际版的,默认是对UNICODE的编码格式的源文件进行编译操作。因此其他编码格式的源文件需要先转为UNICODE格式才能够进行编译。在未指定源程序文件的编码格式的情况下,JDK会优先获取操作系统的file.encoding参数,然后JDK就把我们的JAVA源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放到内存中。如果源文件的编码格式不是file.encoding,就好比用英汉词典转换英法文本,映射怪怪的,得到了扭曲的原文表现,就是俗称的乱码,在此基础上做编译,就会发现不能够正确对应的中文字部分报错!然后,javac把转换后的UNICODE格式的文件进行编译成class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,之后,JDK将此以UNICODE编码编译后的.class文件保存到操作系统中形成我们见到的.class文件。

为什么JDK开发工具包默认格式为UNICODE的编码格式呢?主要原因是因为UNICODE的编码格式是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。 我们国内现在较多使用的编码格式多位UTF-8以及GB2312等编码格式。这里编译java源程序时出现的错误: 编码 GBK 的不可映射字符 (0x80)的主要原因是,在编写java源程序代码时代码中添加了中文注释,且java文件的编码格式不是ANSI编码格式,导致在编译java源程序时报错,无法成功编译。

java编译的时候会转换成统一的unicode编码处理,最后保存的时候再转换为utf编码。所以解决的方法就是更改java源程序的编码格式。

第一种方法就是使用命令javac -encoding UTF-8编译,以保存为UTF-8格式的HelloWorld.java的源程序为例,编译时执行的命令为:javac -encoding UTF-8 HelloWorld.java。执行后,java源程序就被成功编译为.class文件,并且能够通过java.exe命令执行。

javac -encoding UTF-8 HelloWorld.jav
第二种方法就是在编写java源程序代码保存时,选择合适的编码语言进行保存。以notepad编辑软件为例,在保存时把java文件转换成ANSI编码格式即可。操作方法为:选择菜单栏中的编码,选择“ANSI格式编码“,选择后保存即可。

ANSI编码格式
详细通过这篇文章,大家对java源程序编译时出现的报错:HelloWorld.java:8: 错误: 编码 GBK 的不可映射字符 (0x80)的原因就清楚了,当然也就很容易就解决这个问题了。对于在java学习中,大家还有什么经验或者问题,都可以分享学习,千万别吝啬哦!

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值