• Java编码


    Java编码问题

    1. Unicode与码点

    所谓Unicode就是全世界的字符字典,也就是把字符给一个编号,这个编码就是码点。比如
    在这里插入图片描述
    2. 编码
    由于这种分配的编码无论从占用空间角度,还是读取速度,以及逻辑划分角度,都不是完善。所以出现了计算机编码,就是把每一个字符分配一个二进制的数字来表示。比如采用hafman编码,这种可以大大的节省存储空间,现代的压缩逻辑有的就是这样。

    • 采用utf-8编码,是一种边长编码,就是不同的字符占用的字节数目是不同的,一般来说ascii码占用1个字节,中文字符占用三个字节,还有特殊字符占用4个字节等等。
    • 采用utf-16编码,一般每一个字符都占用两个字节,但是对于字符串来说,会存在字节顺序标记(Byte Order Mark,BOM)。BOM是一个特殊的Unicode字符(U+FEFF),用于指示文本的字节顺序(大端或小端),占用两个字节。所以一般会在总字符字节长度上在加上2。
    1. 对应的实验如下
    package com.inspur;
    
    import java.io.UnsupportedEncodingException;
    import java.nio.charset.StandardCharsets;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @author: Zekun Fu
     * @date: 2023/9/30 20:43
     * @Description:
     */
    public class Main5 {
        public static void main(String[] s) throws UnsupportedEncodingException {
    
            // 10 然后一个结尾字符'/0'
            String str = "Hello, 世界! 所有字符都是一样的";
            System.out.println(str.length());
    
            // 获取字符串的UTF-16字节数组
            byte[] utf16Bytes = str.getBytes(StandardCharsets.UTF_16);
            System.out.println(utf16Bytes.length);
    
            int len = 0;
            // 遍历字节数组,计算每个字符所占用的字节数
            for (char c : str.toCharArray()) {
                String t = ("" + c);
                len = t.getBytes(StandardCharsets.UTF_16).length;
                System.out.println("字符: " + t  + ", 字节数: " + len);
            }
            // 遍历字符串的每个码点
            for (int i = 0; i < str.length(); i++) {
                int codePoint = str.codePointAt(i);
                System.out.println("\"" + str.charAt(i) + "\"的码点:" + codePoint);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    1. 结果
      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    蓝桥等考C++组别八级002
    【UE5】通过C++代码创建蓝图对象
    刷题笔记28——一直分不清的Kruskal、Prim、Dijkstra算法
    项目管理中最常见的问题有哪些?
    多旅行商问题(Multiple Traveling Salesman Problem, MTSP):单仓库多旅行商问题及多仓库多旅行商问题(含动态视频)
    java ssm框架的点歌系统的设计与实现源码
    Python Selenium 浏览器打印预览
    0047【Edabit ★☆☆☆☆☆】Minimal I: If Boolean Then Boolean
    块级作用域绑定
    idea创建maven项目
  • 原文地址:https://blog.csdn.net/fuzekun/article/details/133499932