Java编码

Java编码问题

  1. Unicode与码点

所谓Unicode就是全世界的字符字典,也就是把字符给一个编号,这个编码就是码点。比如

  1. 编码

由于这种分配的编码无论从占用空间角度,还是读取速度,以及逻辑划分角度,都不是完善。所以出现了计算机编码,就是把每一个字符分配一个二进制的数字来表示。比如采用hafman编码,这种可以大大的节省存储空间,现代的压缩逻辑有的就是这样。

  • 采用utf-8编码,是一种边长编码,就是不同的字符占用的字节数目是不同的,一般来说ascii码占用1个字节,中文字符占用三个字节,还有特殊字符占用4个字节等等。
  • 采用utf-16编码,一般每一个字符都占用两个字节 ,但是对于字符串来说,会存在字节顺序标记(Byte Order Mark,BOM)。BOM 是一个特殊的Unicode字符(U+FEFF),用于指示文本的字节顺序(大端或小端),占用两个字节。所以一般会在总字符字节长度上在加上2。
  1. 对应的实验如下
java 复制代码
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. 结果
相关推荐
小静AI工程实验室几秒前
Python 爬虫解析 JSON-LD:多块 script、@graph 与坏数据的 9 个边界
爬虫·python·json
daxiangxm5 分钟前
GEO策略:让AI直接引用你的内容
开发语言·团队开发·运维开发·个人开发·数据库开发
jason.zeng@150220711 分钟前
(八)现有架构上新增一个通用Excel导出工具
python·架构·langchain·excel·llama
袁袁袁袁满13 分钟前
AI Agent 如何“看懂“互联网?
爬虫·python·自动化·爬虫实战·多线程爬虫
程序员清风15 分钟前
AI时代建议学点自己真正感兴趣的!
java·后端·面试
泡海椒16 分钟前
JQuick-Excel 实战:用 VALIDATION 建立可维护的 Excel 导入校验
开发语言·python·excel
longlongzihan20 分钟前
前缀积与后缀积 —— LeetCode 238. 除了自身以外数组的乘积
开发语言·c++·leetcode
Duang007_20 分钟前
生产可观测性:从“系统慢“到“根因“的完整链路(Go / TypeScript)
后端·python·golang·typescript·prometheus
Wang's Blog22 分钟前
Java框架 SpringCloud 快速入门: Nacos 配置热更新
java·spring·spring cloud
西索斯coding24 分钟前
Kimi k2.7-code-highspeed 接入 Cline 教程:baseURL 路由变更 + model_id 正确写法
java·服务器·数据库·ai