俗话说,温故而知新。本打算用dos回忆一下基础知识,没想到把自己绊倒了。

用Dos,当然就要回归原始,用记事本啦。下面用一个小练习,演示我遇到的绊脚石。之后,解决了简直笑死。

报错:

Java文件编译出现“编码 GBK 的不可映射字符”

(下图不是我的,我的忘记截图了。但是为了方便演示,我在网上找了相同问题的图片,之后的图都是我自己截我自己的了)

在notepad++里面的代码是在Myeclipse里面粘贴过来的,运行过的。

代码实例:

import java.io.BufferedReader;
import java.io.InputStreamReader; public class Demo6 { /*
* @param args
*
* @在记事本中验证 测试好用
*
* @author 周周
*
* @version 1.1
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub // 定义一个可以存放四只狗的对象数组
DogNew dogs[] = new DogNew[4]; // 从控制台输入各个狗的信息
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr); for (int i = 0; i < 4; i++) {
dogs[i] = new DogNew(); System.out.println("请输入第" + (i + 1) + "只狗的名字"); // 从控制台读取狗名 String name = br.readLine(); // 将名字赋给对象
dogs[i].setName(name); System.out.println("请输入第" + (i + 1) + "只狗的体重");
String s_weight = br.readLine();
// 只要编译器看到readLine,程序就会停在那里等你输入,你不输入它不往下进行
// 但是,readLine读进来之后总是一个字符串,依照要求,需要自己强转一下
float weight = Float.parseFloat(s_weight);
// 将名字赋给对象
dogs[i].setWeight(weight); }
// 计算总体重
float allWeight = 0;
for (int i = 0; i < 4; i++) {
allWeight += dogs[i].getWeight();// getWeight()指取出对应狗的体重。把它累计给allWeight这个变量
}
// 计算平均体重
float avgWeight = allWeight / dogs.length;// 这里没有除以4.而是直接计算出对象数组的大小了 System.out.println("总体重:" + allWeight + " 平均体重:" + avgWeight); // 找出体重最大的狗
// 假设 第一只狗体重最大
float maxWeight = dogs[0].getWeight();
int maxIndex = 0;
// 按顺序和后面的狗比较
for (int i = 1; i < dogs.length; i++) {
if (maxWeight < dogs[i].getWeight()) {
// 修改
maxWeight = dogs[i].getWeight();
maxIndex = i;
} }
System.out.println("体重最大的狗是第" + (maxIndex + 1) + " 体重是"
+ dogs[maxIndex].getWeight());
}
} // 定义一个狗类
class DogNew {
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public float getWeight() {
return weight;
} public void setWeight(float weight) {
this.weight = weight;
} private float weight; }

报错(这个报错你可能没出现,我自己记录一下,总马虎):

The   type   Dog    is   already defined

这个好解决:

1.点击->project->clean(将你的工程文件清理一下)

2.查看包里面是不是还有其他的类名实和这个定义的类名相同,或者是其他类中定义了和这个类名一样了,删除一个,或者改名。是我之前创建过Dog类,这里再用相同类名就不行了。上面代码Dog类,改成了DogNew类。OK

之后,有报错:

编码utf-8的不可映射字符(0xAB)

知道是编码问题,上网搜答案一大堆。

了解一下问题出现的原因:

由于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,当然就会出现不兼容的情况。

可按一下步骤逐一排除:

方法一:

把源文件编码修改成ASCII

1)英文版notepad++

菜单:Configure --> Options --> JDK Tools --> Compiler

1)中文版 notepad++

菜单:设置→首选项→新建,选择编码方式为ANSI.

在这里也进行修改

编码 --->以ANSI格式编码

方法二:

使用-encoding 指定字符集

javac -encoding utf-8 xxxxx.java

报错:

notepad++里面的代码,出现中文不兼容(中文会有红色下划线提示)

了解一下问题出现的原因:

Notepad有不少的插件,这个是拼写错误提示的插件,一般我们不会想要它。里面的错误一般是为了检测英文的拼写错误,中文的注释它就认为是错误的,出现大量的红色下划线。

解决方法:

1.菜单栏 —- 插件 —- DSpellCheck ——Spell Check Document Automatically,点击即可。

2.点击右上角图标,即可。(与上面效果相同)

最后,用Dos运行了这个小练习。有了IDE很少用记事本,基础不牢靠啊。回忆了编码的知识,也是值得的。

Java文件编译出现 “编码 GBK 的不可映射字符”的更多相关文章

  1. 用Javac编译Java文件时出现“编码 GBK 的不可映射字符“的error

    前提:JDK版本 >= 1.6会出现编译报错, 1.6前只会是警告 以下是javac的document: 遇到这种情况的原因是: 文件编码格式与编译器编译所选的encoding不同,有非英文字符 ...

  2. javac编译提示编码GBK的不可映射字符

    使用命令行javac命令编译java文件, 提示错误:编码GBK的不可映射字符. 在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe会获得我们操 ...

  3. 【java错误】错误: 编码GBK的不可映射字符

    java源代码 今天在写java是出现一个编码错误,这里先将书上的java源代码贴出来. import java.io.Console; public class ConsoleTest { //用j ...

  4. CMD运行JAVA出现“错误:编码GBK的不可映射字符”

    问题: 原因: 字符编码问题.由于java文件中有中文字符,而cmd在编译时解码默认使用GBK,所以导致无法解码出正确的中文字符. 解决办法: 使用-encoding指令指定运行编码为UTF-8.

  5. Java中出现“错误: 编码GBK的不可映射字符”的解决方法

    我的java文件里出现中文,是这样一个文件: import java.io.*; public class Test { public static void main(String[] args) ...

  6. 编写java的时候出现“编码GBK的不可映射字符”

    今天在编写文件的时候,使用 javac ***.java 但是java文件里面会出现一些中文的信息,So:会报错 方法: 加参数-encoding UTF-8 例如:javac -encodig UT ...

  7. 使用javadoc 报错:编码GBK的不可映射字符

    运行命令:javadoc Test1.java 报错:编码GBK的不可映射字符 问题原因:类文件中带有非GBK字符 解决办法:javadoc -encoding utf-8 Test1.java

  8. 解决java编译错误:编码GBK的不可映射字符

    新建java文件,存储时Encoding选择了UTF-8, 由于语句中包含中文,javac编译时报错,提示"编码GBK的不可映射字符": 解决办法: 1.使用javac -enco ...

  9. 解决java编译错误:编码 GBK 的不可映射字符 (0x8C)

    1. 问题概述: 程序很简单,打印一行字:你好,世界 (使用的工具是:win10自带的记事本.java的jdk:java development kit) 但是在打开终端进行编译时,报出了一个错误:编 ...

随机推荐

  1. Release file is expired, Updates for this repository will not be applied.(资源索引文件过期问题)

    将Debian下载源同步到本地之后,通过本地资源地址进行apt update操作时提示过期问题: E: Release file for http://localhost/security/dists ...

  2. Reading | 《DEEP LEARNING》

    目录 一.引言 1.什么是.为什么需要深度学习 2.简单的机器学习算法对数据表示的依赖 3.深度学习的历史趋势 最早的人工神经网络:旨在模拟生物学习的计算模型 神经网络第二次浪潮:联结主义connec ...

  3. xpath和lxml类库

    1. xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息 2. 什么是xpath XPath (XML ...

  4. php上传图片预览,放大,裁剪

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 【WPF】实现类似QQ聊天消息的界面

    最近公司有个项目,是要求实现类似 QQ 聊天这种功能的. 如下图 这没啥难的,稍微复杂的也就表情的解析而已. 表情在传输过程中的实现参考了新浪微博,采用半角中括号代表表情的方式.例如:“abc[dog ...

  6. 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程

    之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了.        UWP什么的很久没有正儿八经写了,国内的需求 ...

  7. 使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常

    在学习使用CGlib生成动态代理对象,项目的源代码也很简单: package proxy; import java.lang.reflect.Method; import net.sf.cglib.p ...

  8. 2019-4-25 html学习笔记

    一.概念 文本   用于储存和记录文字信息的载体 html  超文本标记语言(本质就是给文本增加语义 如<h1></h1>就是给文字添加一级标题的语义) 注:互联网三大基石 有 ...

  9. 使用onpaste粘贴事件引起的探索

    前天项目有一个需求,在Excel文档里面直接复制商品编码,然后粘贴到页面空白处就把相应的数据加载出来.当时我是懵逼的,不知道如何下手. 以前没遇到过类似的需求,后来才想起onpaste事件 在使用on ...

  10. Java学习笔记53(网络编程:TCP协议案例)

    简易的案例 客户端: package demo; import java.io.IOException; import java.io.InputStream; import java.io.Outp ...