字符编码知识以及相互之间的转换

简介: UTF-16(UCS-2)是Unicode的其中一个使用(实现)方式,大部分字符采用定长的字节存储,即字符属于宽字符,但UTF-16却无法兼容于ASCII编码。

UTF-16(UCS-2)是Unicode的其中一个使用(实现)方式,大部分字符采用定长的字节存储,即字符属于宽字符,但UTF-16却无法兼容于ASCII编码。

UTF-8是Unicode的一个使用(实现)方式,编码格式兼容ASCII编码,采用变长的字节存储字符,即字符属于多字节字符。

windows(C语言)在使用unicode的时候就是采用的UTF-16,即宽字符。

UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存。

以下是以windows为例的几种字符转换:

1、UTF8转UNICODE

MultiByteToWideChar(CP_UTF8,0,utf8_code,strlen(utf8_code),unicode,strlen(utf8_code));

2、UNICODE转UTF8

WideCharToMultiByte(CP_UTF8,0,unicode,wcslen(unicode),utf8_code,wcslen(unicode),0,0);

3、UTF8与ASCII的相互转换

因为UTF8兼容ASCII所以在进行ASCII字符编码处理的时候,UTF8可以不用转换就可以正确的处理ASCII字符,而在用UTF8进行其他语言字符编码处理的时候就会因为编码问题而出现问题,因为操作系统包括windows在内部数据处理的时候都会统一一种编码方式,通常是ASCII编码形式,然后根据地区以及使用的语言和字符编码不同再进行相应的编码转换,从而正确完成字符编码和字符集(codepage)的匹配,达到正确处理数据的目的。

乱码是可以显示当前指定的字体和文字,但是因为字符的编码不对导致在显示的时候索引错误。

还有一种情况是出现口口口口,所有的都是口,这样的情况是因为缺少字库。

在内存中最小的单位是字节,而最小的文字单位是字符(包括汉字以及其他语言形式),在进行编码存储的时候两者不一定相互对应,即一个字符不一定只占一个字节,所以在进行数据处理的时候需要根据字符进行处理,一段char类型内存可以存储任何字符的编码,但是编解码方式都是按照ASCII单字节对应单个字符的形式,而这种编解码方式只适用于英文字符,对于其他语言字符则会出现问题,而出现乱码的根本原因是编码方式和解码方式不一致。

比如:编码方式采用的是UTF8,而解码的时候却是用的ASCII,或者编码采用的GBK,而解码却是UTF8,这些情况下都会出现乱码,解决办法也很简单,就是统一编解码方式。

不同的codepage对应不同语言字符,不同的语言字符编码方式可能不同,统一的编码方式是unicode。


一、UTF8转ASCII

先把UTF8转换为UNICODE,再从UNICODE转换为ASCII,变的是编码方式,这样在进行输出的时候就可以根据codepage和具体字符编码输出正确的结果,而不会出现乱码。

二、ASCII转UTF8

先把ASCII转换为UNICODE,再从UNICODE转换为UTF8。


目录
相关文章
|
4月前
|
存储 Java API
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
370 188
|
4月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
426 143
|
4月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
438 211
|
3月前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
1466 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
机器学习/深度学习 人工智能 测试技术
【自定义插件系列】0基础在阿里云百炼上玩转大模型自定义插件
本文介绍了如何在阿里云百炼平台上创建大模型自定义插件,以增强AI模型功能或适配特定需求。通过编程接口(API)或框架设计外部扩展模块,开发者可在不修改底层参数的情况下扩展模型能力。文章以万相文生图V2版模型为例,详细说明了创建自定义插件的五个步骤:新建插件、创建工具、测试工具、复制第二个工具及最终测试发布。同时,提供了官方文档参考链接和具体参数设置指导,帮助用户轻松实现插件开发与应用,推动AI技术在各行业的广泛应用。
1757 0
|
3月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
960 1
|
人工智能 运维 数据可视化
阿里云百炼 MCP服务使用教程合集
阿里云百炼推出首个全生命周期MCP服务,支持一键部署、无需运维,具备高可用与低成本特点。该服务提供多类型供给、低成本托管及全链路工具兼容,帮助企业快速构建专属智能体。MCP(模型上下文协议)作为标准化开源协议,助力大模型与外部工具高效交互。教程涵盖简单部署、GitHub运营、数据分析可视化及文档自动化等场景,助您快速上手。欢迎加入阿里云百炼生态,共同推动AI技术发展!
6627 0
|
7月前
|
JSON Serverless API
阿里云百炼流程迁移工作流编排指导文档
本文介绍了大模型服务平台百炼的“流程”功能将于2025年11月15日下线,建议用户尽快迁移至全新升级的工作流编排功能。通过对比流程与工作流在节点数量、发布渠道、音视频互动等方面的能力,展示了工作流的优势,并提供了详细的迁移教学案例,包括开始节点、大模型节点、判断节点和输出节点的具体操作步骤。用户可参考文章完成迁移。
830 3
|
3月前
|
人工智能 数据可视化 API
新手轻松上手:零基础搭建Qwen智能体指南
本文详细介绍了如何从零开始搭建Qwen-Agent智能体,涵盖环境配置、模型部署、工具调用及多Agent协作等关键步骤,帮助无AI经验的开发者快速上手,实现从环境准备到智能体运行的完整流程。