了解11种常见的字符编码格式及其使用场景,让数据传输不再出现问题

本文涉及的产品
数据传输服务 DTS,同步至DuckDB 3个月
简介: 了解11种常见的字符编码格式及其使用场景,让数据传输不再出现问题

前言


在有一次SDK开发中,方法间数据传输出现了问题,由于返回数据采用的数据编码格式不一致会导致数据长度发生变化。因此整理出常用的字符编码格式,减少出现问题的概率。


🌟UTF-8编码


UTF-8 使用变长编码方式。最常用的字符编码之一,支持全球范围内的字符表示。每个字符的长度可以从 1 到 4 个字节不等。


代码示例


// 编码
String text = "Hello, world!";
byte[] encodedBytes = text.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(encodedBytes));
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.UTF_8);
System.out.println(decodedText);  // Hello, world!

🌟UTF-16编码


定长编码方式,用于表示 Unicode 字符集。在 Java 中,字符串的内部表示采用 UTF-16 编码。


代码示例


// 编码
String text = "你好,世界!";
byte[] encodedBytes = text.getBytes(StandardCharsets.UTF_16);
System.out.println(Arrays.toString(encodedBytes));
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.UTF_16);
System.out.println(decodedText);

🌟GBK编码


双字节编码方式。中文字符集编码,支持汉字和其他中文字符。


代码示例


// 编码
String text = "你好,世界!";
byte[] encodedBytes = text.getBytes("GBK");
System.out.println(Arrays.toString(encodedBytes)); 
// 解码
String decodedText = new String(encodedBytes, "GBK");
System.out.println(decodedText);

🌟UTF-32编码


定长编码方式,用于表示 Unicode 字符集。每个字符占用固定的 4 个字节空间,适用于对字符随机访问或精确控制字符长度的需求。


代码示例


// 编码
String text = "你好,世界!";
byte[] encodedBytes = text.getBytes(StandardCharsets.UTF_32);
System.out.println(Arrays.toString(encodedBytes));
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.UTF_32);
System.out.println(decodedText);

🌟Base64编码


用于将二进制数据转换成可打印字符的编码方式


代码示例


// 编码
String text = "Hello, world!";
byte[] encodedBytes = Base64.getEncoder().encode(text.getBytes());
System.out.println(new String(encodedBytes));  // SGVsbG8sIHdvcmxkIQ==
// 解码
byte[] decodedBytes = Base64.getDecoder().decode(encodedBytes);
String decodedText = new String(decodedBytes);
System.out.println(decodedText);  // Hello, world!

🌟ASCII编码


最早的字符编码方式,用于表示基本的英文字母、数字和特殊字符。ASCII 编码使用一个字节表示一个字符,范围为 0-127。


代码示例


// 编码
String text = "Hello, world!";
byte[] encodedBytes = text.getBytes(StandardCharsets.US_ASCII);
System.out.println(Arrays.toString(encodedBytes)); 
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.US_ASCII);
System.out.println(decodedText);

🌟ISO-8859-1编码


也称为Latin-1编码,用于表示西欧语言字符集。ISO-8859-1 使用一个字节表示一个字符,范围为 0-255。


代码示例


// 编码
String text = "Hello, world!";
byte[] encodedBytes = text.getBytes(StandardCharsets.ISO_8859_1);
System.out.println(Arrays.toString(encodedBytes)); 
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.ISO_8859_1);
System.out.println(decodedText);

🌟URL编码


用于在 URL 中表示特殊字符和非 ASCII 字符。通过将特殊字符转换为 %xx 的形式,其中 xx 是字符的 ASCII 值的十六进制表示。


代码示例


// 编码
String text = "Hello, world!";
String encodedText = URLEncoder.encode(text, StandardCharsets.UTF_8.toString());
System.out.println(encodedText);  // Hello%2C+world%21
// 解码
String decodedText = URLDecoder.decode(encodedText, StandardCharsets.UTF_8.toString());
System.out.println(decodedText);  // Hello, world!

🌟HTML编码


用于在 HTML 中表示特殊字符和保留字符。将特殊字符转换为 &entity; 的形式,其中 entity 是特定字符的名称或编号。


代码示例


import org.apache.commons.text.StringEscapeUtils;
// 编码
String text = "<h1>Hello, world!</h1>";
String encodedText = StringEscapeUtils.escapeHtml4(text);
System.out.println(encodedText);  // &lt;h1&gt;Hello, world!&lt;/h1&gt;
// 解码
String decodedText = StringEscapeUtils.unescapeHtml4(encodedText);
System.out.println(decodedText);  // <h1>Hello, world!</h1>

🌟Unicode编码


Unicode 是一种字符集,定义了字符与码点之间的映射关系。在 Java 中,字符串使用 UTF-16 编码表示 Unicode 字符。


代码示例


// 编码
String text = "你好,世界!";
byte[] encodedBytes = text.getBytes(StandardCharsets.UTF_16);
System.out.println(Arrays.toString(encodedBytes));  
// 解码
String decodedText = new String(encodedBytes, StandardCharsets.UTF_16);
System.out.println(decodedText);

🌟GBK编码


Hex 编码是一种将字节数据转换为十六进制字符串的编码方式。它将每个字节转换为两个十六进制字符,从而以可读的方式表示二进制数据。


代码示例


import javax.xml.bind.DatatypeConverter;
// 编码
String text = "Hello, world!";
byte[] bytes = text.getBytes();
String encodedText = DatatypeConverter.printHexBinary(bytes);
System.out.println(encodedText);  // 48656C6C6F2C20776F726C6421
// 解码
byte[] decodedBytes = DatatypeConverter.parseHexBinary(encodedText);
String decodedText = new String(decodedBytes);
System.out.println(decodedText);  // Hello, world!

🌟使用场景


编码方式 使用场景
UTF-8编码 互联网文本传输和存储,多语言环境和国际化应用
UTF-16编码 Windows操作系统,Java编程语言,多语言字符文本处理
GBK编码 中文汉字编码和处理,中国大陆和台湾地区常见
UTF-32编码 精确表示所有Unicode字符,不常用于存储空间敏感的场景
Base64编码 二进制数据传输和存储,例如在电子邮件中传输附件
ASCII编码 英文字符编码,常用于文本传输、数据存储、编程和键盘输入等场景。
ISO-8859-1编码 常用于西欧语言环境下的文本处理和传输。
URL编码 将URL中的非ASCII字符转换为%xx形式,保证传输和处理的正确性
HTML实体编码 将HTML中的特殊字符转换为实体引用,避免与HTML标记冲突 ,常用于Web开发和网页显示中。
Unicode编码 对全球范围字符的唯一标识,字符转换和互通的基础,用于处理多语言字符文本和实现Unicode字符的精确表示
Hex编码 二进制数据转换为十六进制字符串,常用于调试和数据处理

🌟写在最后


以上就是11种常见的字符编码格式。文中若有错误或遗漏,望大家在评论区及时提出指正以及补充。感谢大家的阅读与指正。


相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
Linux 开发者 iOS开发
Flutter笔记:桌面端应用多窗口管理方案
Flutter笔记:桌面端应用多窗口管理方案
1493 0
|
消息中间件 存储 传感器
macOS 系统 安装 Kafka 快速入门
macOS 系统 安装 Kafka 快速入门
736 0
|
机器学习/深度学习 存储 人工智能
深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
深度学习应用篇-推荐系统[11]:推荐系统的组成、场景转化指标(pv点击率,uv点击率,曝光点击率)、用户数据指标等评价指标详解
|
数据可视化 数据挖掘
热图的基础绘制(Matlab代码实现)
热图的基础绘制(Matlab代码实现)
712 0
|
JSON 安全 API
⚡什么是 OpenAPI,优势、劣势及示例
OpenAPI 是一个用于描述RESTful API的标准,它提供了一个接口,使得人和机器无需源代码或文档就能理解服务。它定义了API的结构,与语言无关,适用于REST API。OpenAPI始于Swagger项目,后来成为OpenAPI倡议的一部分,由Linux基金会管理,得到了众多公司的支持。OpenAPI流行的原因包括其语言无关性、可读性、社区支持和工具生态系统。它使用JSON格式,支持各种数据类型,并具有严格定义的结构。虽然有其他如RAML和API Blueprint的竞争格式,但OpenAPI的广泛采用使其成为行业标准。
|
Docker 容器
Docker Desktop 配置阿里云镜像加速
Docker Desktop 配置阿里云镜像加速
|
SQL XML 关系型数据库
IDEA SpringBoot SQL连接常见五大异常处理
IDEA SpringBoot SQL连接常见五大异常处理
2784 0
IDEA SpringBoot SQL连接常见五大异常处理
|
安全 前端开发 Java
Spring Security-全面详解(学习总结---从入门到深化)(上)
Spring Security是Spring项目组提供的安全服务框架,核心功能包 括认证和授权。它为系统提供了声明式安全访问控制功能,减少了 为系统安全而编写大量重复代码的工作。
19356 3
Spring Security-全面详解(学习总结---从入门到深化)(上)
|
JSON 数据格式
|
Python
三分钟教你学会如何将密文解码成明文
三分钟教你学会如何将密文解码成明文
967 0

热门文章

最新文章

下一篇
开通oss服务