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

news2024/11/16 17:42:48

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。


在这里插入图片描述


前言

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


文章目录

  • 前言
  • 🌟UTF-8编码
  • 🌟UTF-16编码
  • 🌟GBK编码
  • 🌟UTF-32编码
  • 🌟Base64编码
  • 🌟ASCII编码
  • 🌟ISO-8859-1编码
  • 🌟URL编码
  • 🌟HTML编码
  • 🌟Unicode编码
  • 🌟GBK编码
  • 🌟使用场景
  • 🌟写在最后


🌟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种常见的字符编码格式。文中若有错误或遗漏,望大家在评论区及时提出指正以及补充。感谢大家的阅读与指正。


请添加图片描述

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

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

相关文章

选读SQL经典实例笔记14_层次查询

1. 结果集 1.1. sql select empno,mgrfrom emp order by 2EMPNO MGR ---------- ----------7788 75667902 75667499 76987521 76987900 76987844 76987654 76987934 77827876 77887566 78397782 7…

React之生命周期

React之生命周期 旧版本&#xff0c;函数组件是没有生命周期的。新版本中通过useEffect触发函数的生命周期 一、基于类组件的生命周期 React的组件生命周期分为挂载阶段、更新阶段和销毁阶段。因为React的state不具有Vue的响应式&#xff0c;所以并没有create阶段 1、挂载阶段&…

Linux学习之循环处理位置参数

for处理位置参数 loopPositionFor.sh里边的内容如下&#xff1a; #!/bin/bash# show learningfor inputString in $* doif [ "${inputString}" "good" ];thenecho "learning"fi donechmod urx loopPositionFor.sh给当前用户把loopPositionFor…

linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程

最近在学RTMP,记录一下完成的编译流程 我是mac 电脑,但是mac上编译一直通过不了,后来才换到服务器上编译, 其实mac也能编译,只是最开始踩到坑里面了… 这里记录一下linux编译完整流程 环境: NDK: android-ndk-r17cFfmpeg: ffmpeg4.2.2 (高版本也可以编译)system: mac 1. …

HCIA实验四

一.实验要求&#xff1a; 1、R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用共有IP&#xff1b; 2、R3 - R5/6/7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3、整个网络配置OSPF环境&#xff0c;IP基于172.16.0.0/16网段划分&#x…

分享5个AI办公新玩法,1行Python代码免费实现!

大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站也叫这个名。 随着ChatGPT的兴起&#xff0c;AI办公也越来越火&#xff0c;今天给大家分享5个AI办公的第三方库&#xff0c;不仅全部免费而且都可以用1行Python代码启动。 赶紧去看看吧&#xff01; 1、智能聊天机器人…

关于minio的简单使用

最近在学习minio相关知识&#xff0c;小小的记录一下学习内容 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等…

【自动化测试】Selenium IDE脚本编辑与操作

之前&#xff0c;我们录制脚本时是录制鼠标和键盘的所有在浏览器的操作&#xff0c;那么脚本会出现多余的步骤&#xff0c;有时候我们需要手动填写脚本或修改脚本&#xff0c;所以我们有必要对selenium IDE脚本编辑与操作有所了解&#xff1b;&#xff08;采用录制的方式很容易…

如何解决大数据下滚动页面卡顿问题

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 前言 之前遇到不分页直接获取到全部数据&#xff0c;前端滚动查看数据&#xff0c;页面就听卡顿的&#xff0c;当然这和电脑浏览器性能啥的还是有点关系。但根源还是一次性渲染数据过多导致的&#xf…

【Git】初始化仓库配置与本地仓库提交流程

目录 一、仓库配置邮箱与用户名 二、本地仓库提交流程 一、仓库配置邮箱与用户名 【Git】Linux服务器Centos环境下安装Git与创建本地仓库_centos git仓库搭建_1373i的博客-CSDN博客https://blog.csdn.net/qq_61903414/article/details/131260033?spm1001.2014.3001.5501 在…

JavaScript基础篇(61-70题)

此文章&#xff0c;来源于印客学院的资料【第一部分&#xff1a;基础篇(105题)】&#xff0c;也有一些从网上查找的补充。 这里只是分享&#xff0c;便于学习。 诸君可以根据自己实际情况&#xff0c;自行衡量&#xff0c;看看哪里需要加强。 概述如下&#xff1a; 希望获取…

2023年深圳杯A题赛题详细解析1.1版本

A题 影响城市居民身体健康的因素分析 附件A1是某市卫生健康研究部门对部分居民所做的“慢性非传染性疾病及其相关影响因素流行病学”调查问卷表&#xff0c;附件A2是相应的调查数据结果&#xff0c;附件A3是中国营养学会最新修订的《中国居民膳食指南》中为平衡居民膳食提出的…

UG NX二次开发(C#)-参数化修改三维模型中的文字

文章目录 1、前言2、在UG NX中创建一个带文字的三维模型3、创建一个UI界面4、 NXOpen二次开发实现5、测试1、前言 在UG NX中通过表达式不仅能修改尺寸参数、位置参数,也能修改文字,通过设计一个UI 界面,使得文字根据输入值的变化而变化,本文就针对三维模型中得文字来讲一下…

LeakCanary内存泄漏检测框架分析。

一、什么叫内存泄漏、内存溢出&#xff1f; 内存溢出(out of memory)&#xff1a;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现out of memory&#xff1b;比如申请了一个integer,但给它存了long才能存下的数&#xff0c;那就是内存溢出。 内…

JavaEE——Bean的生命周期

目录 1、实例化Bean 2、设置Bean的属性 3、初始化Bean &#xff08;1&#xff09;、执行通知 &#xff08;2&#xff09;、初始化的前置方法 &#xff08;3&#xff09;、初始化方法 &#xff08;4&#xff09;、执行自定义方法 &#xff08;5&#xff09;、初始化的后置…

js读取接口返回的最快的那一个

promise.race 顾名思义&#xff0c;Promse.race就是赛跑的意思&#xff0c;意思就是说&#xff0c;Promise.race([p1, p2, p3])里面哪个结果获得的快&#xff0c;就返回那个结果&#xff0c;不管结果本身是成功状态还是失败状态。 Promise.race([this.$axios.get("api/on…

UiPath-TTS

UiPath-Text to Speech既TTS应用 缘起原理法一 - Invoke Method法二 - Invoke Code 总结 缘起 不知道大家有没有使用过Excel的Read Cell功能或者智能音箱&#xff0c;实用性因场景而异&#xff0c;但是很好玩。回到RPA应用中&#xff0c;大家想象一下&#xff0c;如果你给自己…

STM32的CAN外设简介

目录 STM32的CAN外设简介 CAN框图剖析 CAN控制内核 工作模式 位时序及波特率 CAN发送邮箱 CAN接收FIFO 验收筛选器&#xff08;重点&#xff09; 整体控制逻辑 STM32的CAN外设简介 STM32的芯片中具有bxCAN控制器 (Basic Extended CAN 基本扩展CAN外设)&#xff0c;它支…

executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM

Bug现象 spark程序运行正常,但是查看web ui的时候如下图所示: 查看executor logs发现: ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL TERM原因分析 首先程序能够正常运行,只是发现某些executor状态为Dead了,说明该executor被移除了,至于为什么会被…

代码随想录算法训练营第二天| 977

977. 有序数组的平方y 思路&#xff0c;原数组是有序的&#xff0c;但是因为负数平方后可能变无序了&#xff0c;因此利用双指针遍历原数组&#xff0c;比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大&#xff0c;然后对新数组赋值 class Solution {public int…