zoukankan      html  css  js  c++  java
  • javac编译乱码

    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。

  • 相关阅读:
    【微服务架构】SpringCloud之Ribbon
    SpringCloud之Eureka(注册中心集群篇)
    Eureka简介
    两行代码 搞定计数
    HBase详细概述
    电商项目介绍---说的很好
    面试:----Nginx的一理解
    redis介绍
    Linux操作系统介绍
    什么是Solr
  • 原文地址:https://www.cnblogs.com/ioveNature/p/6926257.html
Copyright © 2011-2022 走看看