java输出GB2312、GBK、GB18030、UTF-8所有的字符

news2024/10/5 15:34:59

相关文章

  • 【转】彻底搞明白 GB2312、GBK 、GB18030和UTF-8

1.ASICII、GB2312、GBK、GB18030 以及 UTF8 的关系

在这里插入图片描述

2.编写代码

  • 引入依赖:hutool工具类
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.11</version>
        </dependency>
  • 编写java代码
package top.lishuoboy.test;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.*;

import java.nio.ByteOrder;
import java.nio.charset.Charset;

public class CharsetPrintTest {

    private static final String SPACE = "  ";
    private static final String BASE_DIR = "D:/111/charset/";

    private static final Charset GB2312 = Charset.forName("GB2312");
    private static final Charset GBK = CharsetUtil.CHARSET_GBK;
    private static final Charset GB18030 = Charset.forName("GB18030");
    private static final Charset UTF_8 = CharsetUtil.CHARSET_UTF_8;

    public static void main(String[] args) {
        FileUtil.del(BASE_DIR);

        printAllChar(GB2312);
        printAllChar(GBK);
        printAllChar(GB18030);
        printAllChar(UTF_8);
    }

    /** 输出指定编码的所有字符 */
    public static void printAllChar(Charset charset) {
        StrBuilder sb = new StrBuilder();
        for (int i = 0; i < (1 << 16); i++) {                       // 默认只输出前2个字节,否则太大
            // 不同编码输出字节不一致
            if (GB2312.equals(charset) || GBK.equals(charset)) {    // GB2312、GBK占1、2个字节
                if (i > (1 << 16)) continue;
            } else if (GB18030.equals(charset)) {                   // GB18030占1、2、4个字节
                if (i > (1 << 16) && i < (1 << 24)) continue;
            } else if (UTF_8.equals(charset)) {                     // UTF_8占1、2、3、4个字节
                if (i > (1 << 24)) continue;
            } else {
                System.err.println("不支持的字符编码");
                break;
            }

            byte[] bytes = ByteUtil.intToBytes(i, ByteOrder.BIG_ENDIAN);
            // 每16个换行
            if (i % 16 == 1) {
                sb.append(StrPool.CRLF + Convert.toHex(bytes) + SPACE);
            }
            byte[] bytesNew = remove0(bytes);
            String str = new String(bytesNew, charset);
            str = replace(str, i);
            sb.append(str + SPACE);
        }
        FileUtil.appendString(sb.toString(), BASE_DIR + charset + ".log", charset);
    }

    /** 将字节数组中前面的0干掉(知道第一个不是0的结束) */
    private static byte[] remove0(byte[] bytes) {
        for (int i = 0; i < bytes.length; i++) {
            if (bytes[i] != 0) {
                byte[] bytesNew = new byte[bytes.length - i];
                ArrayUtil.copy(bytes, i, bytesNew, 0, bytes.length - i);
                return bytesNew;
            }
        }
        return bytes;
    }

    /** 【BCompare比对专用】替换莫名其妙的字符,方便BCompare对比,可以不用 */
    private static String replace(String str, int i) {
        String charStr = RandomUtil.BASE_CHAR_NUMBER + RandomUtil.BASE_CHAR.toUpperCase() + ":;=<>?�\u007F";
        if (i > (1 << 7 - 1)) {
            str = StrUtil.replaceChars(str, charStr, "");
        }
        return str;
    }
}

3.对比

3.1. GB2312与GBK

  • 1在这里插入图片描述
  • 2

在这里插入图片描述

3.2. GBK与GB18030(只比对前2个字节)

  • 1

在这里插入图片描述

  • 2

在这里插入图片描述

  • 3

在这里插入图片描述

  • 1
    在这里插入图片描述

  • 2
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业内部FAQ常见问题展示分享的价值

企业内部FAQ&#xff08;常见问题&#xff09;展示分享是一种将常见问题和解决方案以问答形式呈现给员工的方式。这种方式可以帮助企业提高工作效率、提供一致的解决方案、提升员工满意度和减少重复工作。 企业内部FAQ常见问题展示分享的价值&#xff1a; 1. 提高工作效率 企…

恒盛策略:内盘是买入还是卖出?

内盘&#xff0c;又称成交明细&#xff0c;是指交易所实时发布的每一笔成交价格、交易时刻、成交量等具体数据。关于股民来说&#xff0c;每天重视内盘数据已成为必修课。可是&#xff0c;当看到内盘数据时&#xff0c;很多人都会困惑&#xff0c;到底内盘是买入还是卖出呢&…

PCI 简易通讯控制器有黄色感叹号

一、问题描述 设备管理器中&#xff0c;其他设备中显示 “PCI 简易通讯控制器”驱动未安装&#xff0c;显示黄色感叹号&#xff1a; 二、原因分析 右键该驱动&#xff0c;查看属性ID&#xff0c;显示为&#xff1a; PCI \ VEN_8086&#xff06;DEV_1C3A&#xff06;SUBSYS…

学习51单片机怎么开始?

学习的过程不总是先打好基础&#xff0c;然后再盖上层建筑&#xff0c;尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础&#xff0c;再学习单片机&#xff0c;我觉得你一定学不好&#xff0c;因为你的基础永远打不好&#xff0c;因为基础太庞大了&#xff0c;基…

3.多线程(进阶)

文章目录 1.常见的锁策略1.1乐观锁 vs 悲观锁1.2互斥锁 vs 读写锁1.3重量级锁 vs 轻量级锁1.4自旋锁vs 挂起等待锁&#xff08;Spin Lock&#xff09;1.5公平锁 vs 非公平锁1.6可重入锁 vs 不可重入锁1.7相关面试题 2.CAS2.1什么是 CAS2.2CAS 是怎么实现的2.3CAS 有哪些应用2.3…

这50幅画让你看清世界真相,犀利深刻,值得一读!

让你看清这个世界的真相&#xff01; 01 自弃者扶不起 自强者打不倒 02 人人都活在假象里 03 宁可有病再治&#xff0c;也不愿意未雨绸缪 04 一个人成熟的表现 是具备了太极思维 05 最大的监狱是人的思维监狱 06 认知太浅&#xff0c;放弃学习 这就是焦虑和绝望的根本原因 0…

智能型静电消除器的优势有哪些?

智能型静电消除器是一种使用先进技术和智能控制系统来消除静电问题的设备。静电是由于电荷不平衡而引起的现象&#xff0c;常见于工业生产、医疗设备、办公环境等场合。静电的存在可能导致电子设备故障、火灾、等问题。 智能型静电消除器与传统静电消除器相比&#xff0c;具有以…

Java gradle创建聚合项目(父子级项目)

放个简单的demo给大家下载吧。 参考大神gitee地址&#xff1a;demo-gradle-multi: Gradle构建SpringBoot多模块项目示例 (gitee.com)

近期学习练习

练习&#xff1a; 或&#xff1a; //sqrt是数学库函数&#xff0c;开平方 //头文件为math.h 或

固态激光雷达zvision_lidar lio-sam与fast-lio2对比

机械式激光雷达&#xff0c;可以根据ring提取边和面特征&#xff0c;固态式激光雷达实现特征检查需要的工作比较多&#xff0c;可以将降采样的都做为面特征进行处理。lio-sam添加固态雷达代码&#xff1a; 一、imageProjection.cpp (sensor SensorType::ZVISION) {pcl::move…

css冒号对齐

实现后的样式效果 实现方式 html&#xff1a; <el-col v-if"item.showInSingle ! false" :span"6" style"padding: 4px 0"><label>{{ item.label }}&#xff1a;</label><span v-if"singleData[item.prop] ! 0 &…

企业权限管理(四)-订单操作

订单操作 各种表之间的关系 订单查询流程 order-list.jsp界面 创建实体类 订单 package com.itheima.ssm.domain;import com.itheima.ssm.utils.DateUtils;import java.util.Date; import java.util.List;//订单 public class Orders {private String id;private String o…

Vue3 —— ref 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本章 ref 全家桶 主要包括以下几个api 和 对应源码的学习&#xff1a; refisRefshallowReftriggerRefcustomRef 一、api 各自的使用 1、ref 使用 v…

【雕爷学编程】Arduino动手做(04)---震动传感器模块3

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Word转PDF在线转换如何操作?分享转换技巧

现如今&#xff0c;pdf转换器已成为大家日常办公学习必不可少的工具&#xff0c;市场上的pdf转换器主要有两种类型&#xff0c;一种是需要下载安装的&#xff0c;另一种是网页版&#xff0c;打开就可以使用的&#xff0c;今天小编给大家推荐一个非常好用的网页版pdf转换器&…

【解决问题】手动执行maven命令安装指定jar包到本地仓库

背景&#xff1a; 有一个三方jar从远程仓库始终没有拉下来&#xff0c;没办法只能自己去下载&#xff0c;但是自己下载下来&#xff0c;不能直接建立个目录放到本地仓库&#xff0c;需要执行命令才行 操作 命令&#xff1a; mvn install:install-file -DgroupIdcom.alipay …

Java【Spring】使用类注解和方法注解, 更简单的存储和获取 Bean

文章目录 前言一、存储 Bean1, 配置文件2, 五大类注解Bean 的命名规则 3, 方法注解Bean 的命名规则 二、获取 Bean1, 属性注入2, Setter 注入3, 构造方法注入4, Autowired 和 Resource 的区别5, 同一个类型的多个 Bean 注入问题 总结 前言 各位读者好, 我是小陈, 这是我的个人主…

「2024」预备研究生mem-论证推理强化:评价类

一、论证推理强化&#xff1a;评价类 二、课后题

解决: git拉取报错 git 未能顺利结束 (退出码 1)

拉取代码失败信息 解决方法: 执行一下"git push -f origin master"命令即可 步骤: 1.项目文件夹右击选择"Git Bash Here",打开命令窗口 2. 输入"git push -f origin master"后,回画 执行结束 3.再拉取代码,成功

【数学建模】-- Matlab中图的最短路径

前言&#xff1a; 图的基本概念&#xff1a; 若想简单绘制图可以利用此网站&#xff1a; 左上角Undirected/Directed是无向图/有向图 左边 0-index &#xff0c;1-index为0下标&#xff0c;1下标。 Node Count为节点个数 Graph Data&#xff1a;最初尾节点的名称&#xff…