javac中不引人注目的编码小坑
来看下面这段java程序:
public class Test{
public static void main(String[] args){
System.out.println("哈哈哈");
}
}
是不是感觉没什么问题,是的,的确没问题。
但在windows下使用javac Test.java
编译该源文件(源文件编码为utf-8)时会报错,如下:
Test.java:3: 错误: 编码 GBK 的不可映射字符 (0x88)
System.out.println("鍝堝搱鍝?");
^
1 个错误
造成这个问题的原因如下:
源代码文件的字符编码格式为utf-8,但javac编译时会以操作系统默认的字符编码去解释源文件(中文windows平台默认字符编码为gbk),当源代码中只含有英文时不会出现什么问题,但当源文件中含有中文时就会出现上面的错误。
有两个解决这个问题的方法:
- 源文件以gbk编码存储,此方法可行但不推荐。
- 在javac的编译参数中有一个
-encoding
参数,该参数指定了源文件使用的字符编码,所以在编译时加上这个参数指定源文件的字符编码即可,如javac -encoding utf-8 Test.java
。
如果嫌弃每次都要写这么长的话,这里提供一个小方法:
- 在源文件存储的目录中新建一个文本文件,写入以下内容
javac -encoding utf-8 %1
,重命名该文件为myjavac.bat
(myjavac可替换为你喜欢的任何名字)。 - 之后需要编译时使用如
myjavac Test.java
这样的命令即可。 - 可以将该bat文件所在的目录加入到PATH环境变量中,这样在任何目录中都可以使用了。
如果想更懒可以写入javac -encoding utf-8 %1.java
,这样你就可以不用写java后缀了,如myjavac Test
。
上面的方法适用于想简化任何命令的地方。
javac中不引人注目的编码小坑的更多相关文章
- Jquery中on绑定的一些小坑
---恢复内容开始--- 今天我们来说说关于JQuery中事件绑定中on绑定的一些小问题,直接上代码了,大家拷下去就可以用 <!DOCTYPE html> <html lang=&q ...
- C#中的Infinity有个小坑
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...
- Python中需要注意的一些小坑
Python小知识 # a = a + b /a += b 有时是不一样的 a=[1,2,3] b = a a = a + [4,5,6] # a=[1,2,3] # b = a # a += ...
- python中关于round函数的小坑
这个一直都想写,但是因为这个点比较小,所以一直懒得动手.不过还是补上吧,留着早晚是个祸害. round函数很简单,对浮点数进行近似取值,保留几位小数.比如 >>> round(10. ...
- Freemarker中的null判断,小坑一枚
上次写到,在Freemarker中日期转换,可以提取成工具方法.主要是Freemarker对null的处理方式,非常坑爹.只要一个对象或对象的属性为null,就报错,虽然不影响界面显示,但控制台和日志 ...
- Java中的equals比较,小坑一个
最近工作中,经常需要比较2个对象的值.有个问题经常遇到,就是下面的2种情况. public static void main(String[] args) { Integer a =11; Objec ...
- TortoiseSVN 中 一个 Merge revisions to.. 小坑
注意: 不能只选头与尾svn号, 一定要全选 !!全选 !!全选 !!
- Python 中关于 round 函数的小坑
参考: http://www.runoob.com/w3cnote/python-round-func-note.html
- jpa的@Query中"?"占位符的使用小坑
今天使用@Query自定义查询语句,出现了一个错误: java.lang.IllegalArgumentException: Parameter with that position [1] did ...
随机推荐
- 年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?
小孩子才做选择,成年人全都要.那么我们现在就来看看如何获得一台免费的 8 核 4G 公网 Docker 实验平台服务器. Play With Docker 直接打开 https://labs.play ...
- 反制面试官 | 14张原理图 | 再也不怕被问 volatile!
反制面试官 | 14张原理图 | 再也不怕被问 volatile! 悟空 爱学习的程序猿,自主开发了Java学习平台.PMP刷题小程序.目前主修Java.多线程.SpringBoot.SpringCl ...
- 上手了RabbitMQ?再来看看它的交换机(Exchange)吧
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第三弹. RabbitMQ的入门和RabbitMQ+SpringBoot的整合可以点此链接进去回顾,今天要 ...
- 运行SQL文件报错:Got a packet bigger than 'max_allowed_packet' bytes With statement:
英文意思:需要使用一个和现在相比较大的空间,可能mysql中的默认空间比文件需要的空间要小 解决方法: 1.修改配置文件中mysql的默认空间大小:在MYSQL的配置文件 my.in ...
- goland2019.2破解方法
第一步:下载 jetbrains-agent.jar 链接:https://pan.baidu.com/s/1V2qZokAeAGcbsKDaoD9eSw 提取码:nrce 第二步:将下载的jetbr ...
- failed to find romfile "vgabios-stdvga.bin"
问题:failed to find romfile "vgabios-stdvga.bin" 解决: apt-get install vgabios ln -s /usr/shar ...
- 计算机网络-应用层(5)P2P应用
P2P系统的索引:信息到节点位置(IP地址+端口号)的映射 在文件共享(如电驴中):利用索引动态跟踪节点所共享的文件的位置.节点需要告诉索引它拥有哪些文件.节点搜索索引从而获知能够得到哪些文件 在即时 ...
- Vue + axios + SpringBoot 2实现导出Excel
Vue + axios + SpringBoot 2实现导出Excel 1. 前端js代码-发送Http请求 /** * 文件下载 * @param url 下载地址 * @param fileNam ...
- Java面试题(JVM篇)
JVM 194.说一下 jvm 的主要组成部分?及其作用? 类加载器(ClassLoader) 运行时数据区(Runtime Data Area) 执行引擎(Execution Engine) 本地库 ...
- mybatis批量添加数据的三种方式
原文地址:https://www.cnblogs.com/gxyandwmm/p/9565002.html