PersonTest.java:1: 错误: 非法字符: \65279

解决途径如下

用记事本打开java源文件,另存为ANSI格式

如果java文件包含中文字符,使用-encoding gbk格式进行编译,如javac -d . PersonTest.java -encoding gbk

(注意,这里如果使用-encoding utf8仍然会报错)

分析:这里之所以提示“非法字符: \65279”,和UTF-8编码有着密切的联系。准确的说,是在UTF-8编码的基础上添加了BOM头( Byte Order Mark)所造成的。它作为一种Unicode签名方式,是UTF编码方案里用于标识编码的标准标记。在UTF-16里本来是FF FE,而在UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

解决方法:使用记事本另存为ANSI格式,或者使用NotePad++修改格式为不含BOM的UTF-8格式(奇怪的是这样做之后,使用记事本打开查看,却是ANSI格式。但总之已经达到了去BOM头的目的。)

在PHP的namespace使用过程当中,也会经常遇到类似的问题,只要使用记事本打开查看,很有可能就会触发这个问题。

另外,与部署相关的问题:

如果java文件内声明了pakage信息,如package test.person;

则编译完成之后,在运行的时候需要在当前路径下执行命令:java test/person/PersonTest或java test.person.PersonTest

如果在test/person目录下执行java PersonTest则依然会报错

其实这主要是系统默认设置的classpath造成的。

如果编译的字节码重新部署到classes目录下:

javac -d classes PerTest.java

则编译时可以:

java -classpath classes test/person/PersonTest

注意,切不可写成  java -classpath classes classes/test/person/PersonTest

这里其实可以分为两种情形,一种是指定classpath的,则filepath无需玩猴子能,只需写packagepath,因为可以自动组装。

第二种情形,没有指定classpath,则需要些完整的filepath:java filepath

此外,如果第一种情形仍有异常,提示找不到所要编译的类,可以在classpath中添加当前路径。

具体格式为: java -classpath classpathexample packagepathexample(contain targer class filename)

注意:classpath与包路径是两码事,运行的时候,查找的路径=classpath/package_path,切不可把二者重叠使用,那样运行时就会找不到class字节码,因为绝对路径错了。

其实,本质上这里一共涉及到三个path,也就是classpath,filepath,packagepath。使用java命令进行运行的时候,本质上是:

java -classpath "classpath" filepath/filename  ,这里的filename指的是所要运行的字节码class文件的文件名。filepath是该字节码文件的具体路径。运行时,JVM虚拟机会在filepath找到该文件,然后根据指定的classpath以及class文件内部所包含的包路径信息重新计算出一个完整的路径,如果该路径与实际路径幂等,则是可以正常运行的,否则,仍然会报错提示无法加载该类。

如果编译时临时设置jar包的classpath,可以这样:

javac -classpath "lib/*" -d . *.java

lib目录下都是jar包。

注意:如果一次指定多个classpath,则需要使用“path1;path2”的方式给出classpath。

javac编译乱码的更多相关文章

  1. javac编译不同目录的源码提示找不到符号

    对于单个文件的且不引用其他类文件的java源码用javac编译大家都很熟悉即 javac mycode.java 但是如果这个文件引用到了其他的类文件,在进行编译的时候就会提示找不到符号,这时我们需要 ...

  2. javac 编译与 JIT 编译

    编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...

  3. Javac编译和JIT编译

    编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...

  4. javac编译原理(一)

    我们都知道,计算机只能识别二进制语言,是不能直接识别java c c++等高级语言的.将高级语言转化成计算机可以是别的二进制语言,这个过程就叫编译. 有次面试,面试官问了一道“java的编译原理是什么 ...

  5. Javac编译与JIT编译

    本文转载自:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的 ...

  6. Linux下使用javac编译

    Linux下使用javac编译Hadoop程序 首先要配置好Hadoop, 给出两个教程 Hadoop安装教程单机/伪分布式配置Hadoop2.6.0/Ubuntu14.04 Hadoop集群安装配置 ...

  7. 使用javac编译zookeeper项目

    这里记录zookeeper编译源代码上的一些细节的问题. 网上不少关于如何使用ant eclipse来构建zookeeper对应的eclipse工程的记录.这里就不再过多赘述.只做简单阐述. 这里主要 ...

  8. 【深入Java虚拟机】之七:Javac编译与JIT编译

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...

  9. javac编译后运行提示找不到或无法加载主类

    第一种常见错误: package demo_01; public class hello { public static void main(String[] args) { System.out.p ...

随机推荐

  1. Android-第二天

    1.Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

  2. Angular 4+ Http

    HTTP: 使应用能够对远端服务器发起相应的Http调用: 你要知道: HttpModule并不是Angular的核心模块,它是Angualr用来进行Web访问的一种可选方式,并位于一个名叫@angu ...

  3. angular4 中自定义pagination组件

    你用Angular 吗? 一.介绍 一个基于angular4 开发的可以分页的组件.组件的好处就是可以复用,复用.....作为一个前端码农,开始的分页功能实现是我用jquery写的,其他同事用的时候都 ...

  4. Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  5. 【转】WPF 从FlowDocument中找到Hyperlink

    原文地址:How can I get a FlowDocument Hyperlink to launch browser and go to URL in a WPF app? #region Ac ...

  6. commons-logging的使用

    简介 commons-logging是Apache commons类库中的一员.Apache commons类库是一个通用的类库,提供了基础的功能,比如说commons-fileupload,comm ...

  7. WebSphere--用户简要表

     Application Server 含有 com.ibm.servlet.personalization.userprofile 软件包中的类,这些类使维护关于 Web 站点访问者的持久信息和利用 ...

  8. IIS与Apache禁止IP地址直接访问网站

    一.IIS 防止恶意域名指向解决方法 首先单击"开始"-"设置"-"控制面板"-"管理工具",找到"Inter ...

  9. DDMS和程序打包过程

    1. Android版本对应api级别 2.3~~~~~10 3.0~~~~~11 4.0~~~~~14 4.1.2~~~16 2.3和4.1.2是最稳定的 2.Android手机常见分辨率 320* ...

  10. poj2479 最大子段和

    题意:给定一个数列.求出数列中不相交的两个子段和,要求和最大 解题思路:对每一个i来说,求出[0-i-1]的最大子段和以及[i-n-1]的最大子段和,再加起来,求出最大的一个.[0-i-1]的最大子段 ...