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 ...
随机推荐
- 虚拟机解释器与bytecode对接
心头一直有个疑问,jvm虚拟是如何对接class中的字节码的?或者说在未进入 JIT优化阶段时,解释器是如何对接的? 大概阐述 hotspot通过C++代码在堆上申请一块空间,向里面填充一组指令,然后 ...
- Android Studio 突然无法识别真机问题
最近在赶项目,今天AS突然疯狂跟我作对,森气!! 平时连接手机没有问题,今天突然各种识别不到真机!! 1.数据线,check.没有问题. 2.重启AS,还是不行. 3.安装驱动,行不通. 4.已经弹出 ...
- Shell脚本之for循环语句的应用
在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同.这时候可以使用for循环语句,针对不同的取值重复执行相同的命令序列. for循环语句的语法结构: ...
- 什么?Java9这些史诗级更新你都不知道?Java9特性一文打尽!
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- install -M
[root@controller ~]# source admin-openrc [root@controller ~]# neutron ext-list +-------------------- ...
- 操作系统-中断(2)IA-32/Linux的向量中断方式
一.Intel定义下的异常和中断 不同体系和教材往往对异常和中断有不同的定义. Intel定义:中断是一种典型的由I/O设备触发的.与当前正在执行的指令无关的异步事件:而异常是处理器执行一条指令时,由 ...
- Mac本软件安装之后打不开的解决办法
Mac本软件安装之后打不开的解决办法 MacOS系统版本10.15.3 一,安装Axure RP 9 问题:安装之后打不开 提示“Axure RP 9已损坏,无法打开”或“打不开 Axure RP 9 ...
- npm修改默认配置
1.nodejs在program files下面会造成一些项目中的问题,因此nodejs在program files下需要先卸载nodejs 2.安装nodejs到自定义的目录下面,例:D:\node ...
- Mac搭建appium环境
1.安装brew 查看是否已经装上brew,终端输入命令:brew --version,已经装上的就不用再装了: 如果没有安装,终端输入命令:ruby -e "$(curl -fsSL ht ...
- 把Autofac玩的和javaSpring一样6
大家好,今天来介绍我开源的一个autofac.Annotation项目 源码:https://github.com/yuzd/Autofac.Annotation 本项目是autofa的一个扩展组件, ...