编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解

1.问题描述

在执行 javac 命令时无法编译成功,提示 错误: 编码 GBK 的不可映射字符 (0x80)

image-20221011223706000

2.问题分析

先简单的说:就是你的代码中带了中文,即使时注释里有中文也算含有。现在,我们的目的就是为了 解决能够带有中文成功编译 的问题。

这是因为我们的文件编码格式是 UTF8,而当我们使用 cmd命令行窗口 时,cmd 的编码格式为 GBK

由于编码的不同,导致 cmd 会以 GBK编码格式 去解析我们的文件,但是刚才说了,我们文件的编码格式是 UTF8,因此解析中文不成功,才报错。

但解析英文是成功的,因为英文最早来源于 ASCII 编码,而GBKUTF8这两种编码都是完全兼容ASCII 编码的。

为了验证我说的cmd编码格式为GBK,我们来看一看

image-20221011225150880

image-20221011225303428

3.问题解决

如果你已经有了sublime但没有设置中文,从 3.2节 看起;

如果你有了sublime并且设置了中文,从 3.3节 看起。

如果你的文件选项(点击左上角文件即可弹出)中有如下显示的红色框中的两个选项并设置了中文,就跳过 3.3节 ,从 3.4节 看起。

image-20221012004540582

3.1 sublime Text 3引入

你还在使用记事本编译 java 吗?其实是非常不推荐的。

这里我们推荐一款轻量级的Java编辑工具:sublime Text 3

3.1.1 介绍

一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插件扩展机制,用她来写代码,绝对是一种享受。相比于难于上手的Vim,浮肿沉重的Eclipse,VS,即便体积轻巧迅速启动的Editplus、Notepad++,在SublimeText面前大略显失色,无疑这款性感无比的编辑器是Coding和Writing最佳的选择,没有之一。

3.1.2 特点

一款跨平台代码编辑器,在Linux、OS X和Windows下均可使用。Sublime Text 是可扩展的,并包含大量实用插件,我们可以通过安装自己领域的插件来成倍提高工作效率。Sublime Text 分别是命令行环境和图形界面环境下的最佳选择,同时使用两者会大大提高工作效率。Sublime Text 为收费软件,建议有能力的人付费使用,以支持开发者。不过不购买也可以一直使用。

3.1.3 下载与安装

3.1.3.1 🏠 下载官网: http://www.sublimetext.com/3

image-20221011225926171

3.1.3.2 找到下载的安装包位置,双击,建议修改一下安装路径,不要放在C盘。

image-20221011233024873

3.1.3.3 选择是否添加到资源管理器上下文菜单

image-20221011233200311

3.1.3.4 核实信息,准备安装

image-20221011233317525

3.2 sublime设置为中文

3.2.1 Preferences -> Package Control

image-20221011234550612

3.2.2 输入 install package

image-20221011234747233

回车后可能需要等待一会因为需要加载包,才会出现下面步骤中的面板,耐心等一会哦

3.2.3 输入 Chinese ,选择 ChineseLocalizations

image-20221011235729493

3.2.4 安装成功

显示这样的界面,可以看到已经变成中文了

image-20221011235950777

3.3 🚩 安装GBK选项插件 - ConvertToUTF8

默认情况下,我们的 Sublime Text 3 是没有 GBK编码格式设置了,为了是我们的文件设置为 GBK,应当安装 GBK选项插件。

3.3.1 下载ConvertToUTF8包

🏠 下载地址:https://github.com/seanliang/ConvertToUTF8/releases/tag/1.2.13

image-20221012001249894

3.3.2 将解压后的ConvertToUTF8文件夹迁移到sublime的Packages目录下

进入 Packages 目录:

image-20221012002413055

image-20221012002925470

拷贝到Package目录下后选要重启sublime才能看到效果。

image-20221012003047546

3.3.3 比较一下ConvertToUTF8插件安装前后sublime的变化

  • 安装前:

    image-20221012001659093

  • 安装后:

    image-20221012001921017

3.3.4 一个小 bug 的解决

你可以发现,我们出现了两次(如果你没有出现,可能需要等一下就会出现,如果你没出现就直接跳过 3.4 节),这是为什么呢?

image-20221012003605893

其实不解决也没问题,但我又强迫症哈。我们再打开 Packages 目录看下:

image-20221012003830150

因此要解决这个其实很简单了,我们直接删除 ConvertToUTF8-1.2.13 ,留下自动生成的 ConvertToUTF8 即可,删除后的效果:

image-20221012004012339

我们再来看看sublime的文件选项,就没有显示两次啦:

image-20221012004104892

3.4 🚩 创建文件,设置编码格式,编写完成后 另存为

3.4.1 创建新文件

image-20221012005131638

3.4.2 如果代码中含有中文,设置文件编码为GBK

如果代码中不带中文,则不需要进行这一步,直接创建完新文件编写代码即可。

image-20221012011535918

3.4.3 编写代码

//带了中文的代码
public class Tree
{
     public static void main(String[] args){
       Living tree=new Living ();
       tree.say();
      }
}
class Living
{
   public void say(){
       System.out.println("我是一棵树");
   }
}

3.4.3 文件 -> 另存为

image-20221012005555736

image-20221012005712007

3.5 验证 javac 可行性

在我们刚才 保存Tree.java文件 的目录下打开cmd控制台,执行 javac Tree.java。生成了两个 .class 文件则说明执行成功。

image-20221012010152523

3.6 一个小 bug 的补充

如果你下次打开 Tree.java 时发现里面的中文变成了乱码,只需要执行 文件选项 中的 Reload with Encoding 即可。

为什么会出现这种情况呢?因为你在打开文件的时候,计算机可能是以 UTF8 的格式给你解码文件的,而我们的Tree.java文件是以 GBK 方式编码。因此计算机在以 UTF8格式 解码时无法解析文件中的 GBK编码格式的中文,导致UTF8格式解析成了乱码。

所以解决这个也很简单,执行 Reload with Encoding 的 GBK 选项 即以GBK方式重新解码

image-20221012010720705

4.补充:对于为什么cmd,或者说windows采用GBK而非UTF8的理解

  • 一方面是由于历史原因,Windows支持GBK的时候UTF-8还没有普及,而微软是一家及其看重存量客户和兼容性的公司,形成了路径依赖不能轻易改变。

    UTF-8只是在存储欧洲语言文字方面有优势。由于兼容ASCII,UTF-8存储拉丁字母、数字、半角标点等字符使用1个字节,存储其他非拉丁字母的欧洲文字通常使用2个字节,但存储东亚文字,如汉字、日本假名、韩国谚文等,则使用3个字节,少数不常见的字符则用4个字节。而UTF-16对大多数常见语言文字统一使用2个字节,少数字符使用4个字节。

    因此,UTF-8在东亚地区并非最佳存储和传输方案,它的真正优势在于实现Unicode的同时兼容ASCII编码。

  • 另一方面,GBK编码的特点是 英文占1个字节,中文占两个字节。而UTF8编码的特点是 中英文统一占三个字节。而我们知道在计算机存储方面几乎绝大部分都是英文,因此存储上GBK的优势就很明显,相较于 UTF8 能够大大的节省空间。

  • 21
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 34
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 34
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是谢添啊

感谢你的支持,我会继续加油的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值