首页 > 编程语言 >在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279

在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279

时间:2023-05-08 11:06:18浏览次数:44  
标签:字符 java 编码 encoding HelloWorld 报错 格式 class

操作背景:我在eclipse建立了个HelloWorld.java文件,格式UTF-8,然后复制保存到C:\Users\alex\test目录下,在此处运行按住Shift+右键调出cmd命令窗口,输入命令:javac HelloWorld.java,

然后报错:HelloWorld.java:6: 错误: 编码GBK的不可映射字符

解决办法:

方法一:带上编码utf-8,运行命令:javac -encoding utf-8 HelloWorld.java,

结果,同目录下出现HelloWorld.class文件,编译成功!

方法二:用记事本另存为ANSI编码格式的,直接运行命令:javac HelloWorld.java

出现对应的class文件,成功!

 

注意:class类名必须与文件名保持一致!!

如果不一致会报错:b.java:6: 错误: 类a是公共的, 应在名为 a.java 的文件中声明(我把类a的文件名改为b.java后)

例如:上述HelloWorld.java文件里含有的class名必须为HelloWorld,如:public class HelloWorld {}

如果在编译过程中出现报错:错误: 非法字符: \65279...错误: 需要class, interface或enum

就必须先把java文件转为无BOM的utf-8的编码:用notepad++就可以实现转换保存。

这是因为:由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk XX.java,当然就会出现不兼容的情况。

解决办法是:应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java,这下没警告了,运行也正确了在JCreator 4中设置:菜单:Configure --> Options --> JDK Tools --> Compiler,选中<Default>,然后选Edit,Parameters里面,最前面添加:-encoding UTF-8。

Parameters原来的

默认值为:-classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]

修改后为:-encoding UTF-8 -classpath "$[ClassPath]" -d "$[OutputPath]" $[ModJavaFiles]


标签:字符,java,编码,encoding,HelloWorld,报错,格式,class
From: https://blog.51cto.com/wangshiyu/6253137

相关文章

  • (非root权限)java环境配置
     打开文件:vim~/.bashrc 末尾添加配置:exportJAVA_HOME=/usr/share/jdk8exportPATH=$JAVA_HOME/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar更新:source~/.bashrc(更新路径) ......
  • 爬虫 202107【JavaPub版】
    写于2021071117:10北京朝阳区@[toc]方法:首先下载mitproxy,pip安装方法:>pipinstallmitmproxy基本使用方法:给本机设置代理ip127.0.0.1端口8001(为了让所有流量走mitmproxy)具体方法请百度。启动mitmproxy。windows:>mitmdump-p8001Linux:>mitmproxy-p80012.修改chromedriver......
  • 【JavaPub版】MarkDown 写简历-建议收藏-早晚用得上
    MarkDown原文档和加照片又到了金三银四的季节,MarkDown写简历真不错,附MarkDown文本##联系方式----手机:-Email:-微信:##个人信息----姓名:-学历:-出生日期:19**.08-期望职位:Java研发工程师/大数据工程师-期望城市:-工作状态:##教育背景---##社会工作......
  • 《java接力》springboot篇——新建项目
    新建项目参考链接:https://www.cnblogs.com/wuyizuokan/p/11117294.html参考链接:https://segmentfault.com/q/1010000007938655新建项目无法链接spring官网法一:可以使用https://start.springboot.io/法二:使用自定义网址,把那个网址的https后面的s去掉,使用http开头就可以访......
  • Java入门7(异常处理,list集合)
    异常处理(try-catch)错误的种类一般来讲,程序出现错误的时候,大致情况有三种:语法错误运行时错误,指的是各程序运行的时候,出现的一些没有想到的问题,比如除数为0,比如数组下标越界等等逻辑错误,运行结果和与其结果不一致,俗称bug⭐Java中的异常处理机制主要用于处理运行时错误异常......
  • Java面试-框架篇九
    1、spring的理解Spring是实现了工厂模式的工程类,这个类名为BeanFactory(实际是一个接口),在程序中通常BeanFactory的子类ApplicatioContext。Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。Spring提供了对IOC良好支持,IOC是一种编程思......
  • JavaScript fromCharCode() 方法
    fromCharCode()方法返回指定的Unicode编码对应的字符。语法格式:String.fromCharCode(n1,n2,...)参数:n1,n1,..表示指定的Unicode编码。示例:(1)返回指定Unicode编码的字符:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">&......
  • Java 三方接口PHP写法;doHmacSHA2; 将字节数组转换成16进制字符串;Mac.getInstance;Hma
    先看一段Java代码,一个签名过程1packagecom.sixents.bss.filter;234importorg.apache.http.HttpEntity;5importorg.apache.http.NameValuePair;6importorg.apache.http.client.entity.UrlEncodedFormEntity;7importorg.apache.http.client.met......
  • 29基于java的在线考试系统设计与实现
    本章节来介绍一个基于java的在线考试系统的实现系统概要近年来,随着世界各国需要参加考核的人员与日俱增,单纯依靠传统的人工安排考场和监考人员的纸质化考试逐渐显示出了效率低,易发生冲突的缺陷,这时,在线考试系统便应运而生,此种考试方式以方便快捷高效等优点将越来越适用于如今......
  • Java开发、SpringBoot开发(狂神说Java)
    目录JavaSpringBoot开发学习(狂神说Java)SpringBoot概述微服务SpringBoot程序安装测试配置文件原理自动配置主启动类yaml语法给属性赋值的几种方式JR303校验多环境配置及配置文件位置SpringBootWeb开发理论静态资源首页模板引擎Thymeleaf语法MVC配置原理,扩展SpringMVC视图解析视......