字符编码方式

【TiktokAPI】Tiktok直播API与实时互动功能开发完全指南 Tiktok直播API允许开发者创建、管理直播,并实现各种互动功能。/*** 获取Tiktok直播API访问令牌* @param {string} client_id - 应用ID* @param {string} client_secret - 应用密钥* @param {string} code - 授权码* @param {string} redirect_uri - 重定向URI* @returns {Promise<object>} 访问令牌响应*/try {}), 阅读详情
用VS2013时,不小心改变了其默认保存的编码方式:Chinese Simplified(GB2312)-Codepage 936,导致软件界面中文显示时部分字会乱码。

  字符编码对于程序的跨平台开发、中文乱码问题解决等都是非常重要。在计算机内部,所有的信息最终都表示为二进制数,每个二进制位(bit, 比特)有0和1两种状态,八个比特组成一个字节(Byte),即一个8位的物理存贮单元。而字符则是一个文化相关的符号。编码(encode)负责字符到字节的编码转换,解码(decode)负责字节到字符的解码转换。

一、ANSI多字节编码

  在计算机最早的时期,只支持英文字符,都是用ASCII(American Standard Code for Information Interchange, 美国标准信息交换代码)编码。ASCII码规定一个字符只占用一个字节的后面7位,最前面的1位统一规定为0,因此一共规定了128个字符,比如大写字母A是65(二进制01000001)。随着计算机的推广,越来越多的国家和地区面临本地语言如何在计算机里使用和显示的问题。对于中文DOS系统和早期的中文Windows系统,大陆制定了国际码GB2312,港澳台地区则使用大五码Big5。微软针对这些本地化字符编码采用的ANSI(American National Standards Institute, 美国国家标准学会)多字节编码方式。系统里的英文字符用0x00~0x7f来表示,而对于中文之类的本地化字符编码,用0x80~0xFF来表示,这样技能兼容ASCII,又能正常使用本地化语言。
  大陆的国际码发展了好几代,归结如下:
这里写图片描述

  新的国际码标准通常是兼容旧的编码方式的,所以一般对简体中文的文本选择GBK或GB18030编码都是可以正常显示的。微软针对各种本地化语言的页面有自己的编号方式,GBK对应的代码页编号是936,GB18030对应的代码页编号是54936。

二、Unicode编码

  ANSI多字节编码解决了各种语言的本地化使用问题,也有自己的缺陷:各地指定的编码标准只对自己的语言文字有效,大家都用0x810~0xFF来表示自己的语言文字,而不考虑别的语言文字如何编码,所以不同语言文字的编码都是冲突的。比如简体中文(GBK)的文本放到繁体中文(Big5)的操作系统里,就被默认解析成繁体字编码,显示混乱的繁体字。
  因此,国际组织制订了unicode,也叫万国码、国际码等。这种字符编码是对全球语言同一分配编码区间,各种语言互不冲突。Unicode编码可以分为编码方式和实现方式两个层次。对于国际组织发布的Unicode编码标准,就是编码方式,最常用的是UCS-2(Universal Character Set 2),采用两字节编码一个字符。当然国际语言文字太多,两个字节不够用,就有四字节编码方式UCS-4。它们仅仅是标准,而不是实现。
  在编码实现的过程中,有些考虑旧的单字节ASCII编码,有些不考虑兼容性;有些考虑双字节中哪个字节放在前面,哪个字节放在后面的问题,即BOM(Byte Order Mark, 字节顺序标记)的作用。因此诞生了多种Unicode的实现方式,统称为Unicode转换格式(Unicode Transformation Format, UTF):

  unicode只规定了符号的二进制代码,却没有规定了这个二进制代码如何在计算机存储。比如汉字“严”的unicode是十六进制4E25,二进制数是100111000100101。也就是说这个字符的表示至少需要两个字节。其他更大的字符,可能至少需要3个字节或4个字节。这就导致出现了unicode的多种编码方式,也就是说不同的二进制格式用来表示unicode。
ASCII码中,用来表示字符的二进制数,就是计算机中的存储形式。

UTF-8
UTF-8是Unicode的实现方式之一。UTF-8是一种变长的编码方式,可以使用1~4个字节表示一个字符,根据不同的字符变化字节的长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
这里写图片描述

三、C++使用的字符串

在 C++ 中,以前通常使用 char 表示单字节的字符,使用 wchar_t 表示宽字符,对国际码提供一定程度的支持。 char * 字符串有专门的封装类 std::string 来处理,标准输入输出流是 std::cin 和 std::cout 。对于 wchar_t * 字符串,其封装类是 std::wstring,标准输入输出流是 wcin 和 wcout。虽然规定了宽字符,但是没有明确一个宽字符是占用几个字节,Windows 系统里的宽字符是两个字节,就是 UTF-16;而 Unix/Linux 系统里为了更全面的国际码支持,其宽字符是四个字节,即 UTF-32 编码。这为程序的跨平台带来一定的混乱,除了 Windows 程序开发常用 wchar_t* 字符串表示 UTF-16 ,其他情况下 wchar_t* 都用得比较少。

在新标准 C++11 中,对国际码的支持做了明确的规定:
● char * 对应 UTF-8 编码字符串(代码表示如 u8”多种文字”),封装类为 std::string;
● 新增 char16_t * 对应 UTF-16 编码字符串(代码表示如 u”多种文字”),封装类为 std::u16string ;
● 新增 char32_t * 对应 UTF-32 编码字符串(代码表示如 U”多种文字”),封装类为 std::u32string 。

MFC 一般用自家的 TCHAR 和 CString 类支持国际化,当没有定义 _UNICODE 宏时,TCHAR = char,当定义了 _UNICODE宏 时,TCHAR = wchar_t,CString 内部也是类似的。 Qt 则用 QChar 和 QString 类(内部恒定为 UTF-16),一般的图形开发库都用自家的字符串类库。

四、字符编码测试

在Windows系统下,将一个txt文件另存为时, 在弹出对话框底部有个编码下拉框。如下图所示
这里写图片描述
里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。
1)ANSI:默认的编码方式,简体操作系统是GBK,繁体操作系统就是Big5。Window命令行默认的字符编码也是这个。
2)Unicode:Window所说的国际码一般都是之UTF-16LE,文件开头带有BOM标记(两个字节)。
3)Unicode big endian:即UTF-16BE,文件开头带有BOM标记(两个字节), 很少用到。
4)UTF-8:这是 Unix/Linux 系统里通用的国际码存储交换格式,记事本保存的文件开头会有 UTF-8 签名(3字节,类似 BOM)。

总结

从跨平台的运行的角度,推荐UTF-8编码的源文件。UTF-8 和 GBK 其实对英文和数字都是一样的 ASCII 单字节编码,所以源文件用英文和数字是肯定不乱码,主要是汉字之类的本地语言文字编码显示容易出错。
UTF-8 编码是属于通用的存储交换格式,但这种编码的缺点就是一个字符的长度不固定,这对字符串操作效率是有影响的,因为得先确定每个字符的长度。

参考资料:
https://qtguide.ustclug.org/
http://www.unicode.org/faq/utf_bom.html

瑞芯微RV1126B芯片实战:如何用3Tops NPU打造智能安防摄像头(附配置指南) 本文详细介绍了基于瑞芯微RV1126B芯片构建高性能智能安防摄像头的实战经验。文章深入剖析了其3Tops NPU与独立AI-ISP的协同优势,提供了从硬件选型、开发环境搭建、AI模型部署到系统调优的全流程配置指南,帮助开发者充分发挥芯片潜力,实现高效、稳定的智能视觉应用。 阅读详情

相关推荐

激光可燃气体传感器DIY指南:从TDLAS原理到STM32实战(附代码)

本文详细介绍了如何DIY激光可燃气体传感器,从TDLAS原理到STM32实战,包括硬件选型、光路搭建、电子系统设计和嵌入式软件开发。通过TDLAS技术实现高灵敏度甲烷检测,适合工业安全和环境监测应用。附有完整代码和实用调试技巧,帮助开发者快速掌握光学气体检测技术。

fanta的博客 440

QT之QChar

QT之QChar QChar 类是 Qt 中用于表示一个字符的类,实现在 QtCore 共享库中。QChar 类内部用2个字节的Unicode编码来表示一个字符。 一、编码 //char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析。 char gemfield=’g’; //gemfield标记的这块内存的大小就是1个字节,信息就是01100111,8位。 char ge...

weixin_30512785的博客 1675

海康安防平台接口调试指南:从签名生成到Vue项目集成

本文详细解析了海康安防平台接口认证规则,从签名生成到Vue项目集成的完整流程。通过核心机制解析、签名工具使用技巧及Vue项目中的优雅集成方案,帮助开发者高效完成接口调试,避免常见问题。特别适合需要将海康安防平台接口集成到Vue项目中的开发者参考。

weixin_42533120的博客 438

QT学习(19):QChar和QByteArray

QChar和QByteArray

qq_45088122的博客 1690

RBF(径向基神经网络)基础解析与代码实例:拟合任意函数

目前RBF这一强大工具已经被基本证实可以拟合任意函数! 在机器学习领域,神经网络是一种强大的工具,用于解决各种复杂问题。其中,径向基函数(RBF,Radial Basis Function)神经网络以其独特的结构和优异的性能,在非线性函数逼近、模式识别等领域表现尤为突出。RBF神经网络是一种前馈神经网络,其隐含层节点的激活函数采用径向基函数,具有更强的局部逼近能力和更快的收敛速度。

橙色小博的博客,励志在人工智能领域发光发热! 1604

Aurix TC387 Ethernet代码解析之二_移植

英飞凌官方仅提供了TC397的例程,故需通过TC397例程来移植到TC387新建工程里。TC397官方例程名称【Ethernet_1_KIT_TC397_TFT】,网络上可以免费获取到,此处不赘述。使用工具【

m0_69929716的博客 884

char qt 转unicode_Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)...

1、文本流设置unicode小端模式2、写入文本前两个字节FF FE3、字符串转成unicode编码QList list = QTextCodec::availableCodecs();//可以获取Qt支持的编码,下面列出字符串的几种编码名称//GBK GB2312//unicode 小端//UTF-8//UnicodeLitteUnmarked 小端//UnicodeBigUnmarke...

weixin_33982195的博客 327

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4529

Qt编写区位码gb2312、机内码、国标码————附带详细介绍和编码实现

在网络传输过程中:A要给B传输一个数据,如果A传去的数据是用GB2312-80编的,而B读取地方式是用ASCII方式的,GB 2312-80将区位码传过去,当B收到时会先读到区码,因为区码和位码的范围用十进制表示都是0~93,如果此时的区码的十进制是6,那么ASCII对应的6则是ACK,会发现ACK是回包的指示。3,通信字符:0~32,比如6,ACK,在两个电脑通信时,会一方接到另一方传来的数据时,就会回一个ACK包。,在7位的最前面补一个0,变成8位(bit),即一个字节(Byte)。

韩江雪de 小屋 2001

论文记录:Affine Formation Maneuver Control of Multiagent Systems

多智能体编队控制仿真记录 实现功能:平移/旋转/尺寸缩放/shear,见截图 注意:本仿真图只是起到了演示效果,中间过程速度产生突变,实际中是不允许的。需要进行速度规划,这一点论文中仿真图更为贴合实际。 参考论文:Zhao, S. (2018). Affine Formation Maneuver Control of Multiagent Systems. IEEE Transactions on Automatic Control, 63(12), 4140–4155. 突然发现有个博主写得很好,参考:

W1H1J1的博客 2108

Open3D 读取、保存、显示点云【2025最新版】

paint_uniform_color给所有的点上一个统一的颜色。博客长期更新,本文最近更新时间为:2025年1月1日。

点云侠的博客 37万+

VTK汉字显示问题

VTK汉字显示问题

MFC学习之路 3381

宇瞳杯安防镜头设计

宇瞳杯安防镜头设计

weixin_72050316的博客 1516

字符编码方式总结

ASCII: 固定长度,每个字符占用1字节,主要用于英文字符集。ISO-8859-1: 扩展了 ASCII 标准,支持西欧语言字符,兼容性好。UTF-8: 可变长度(1到4字节),存储效率高,兼容 ASCII,广泛用于多语言文本。UTF-16: 可变长度(2或4字节),处理简单,支持几乎所有的 Unicode 字符。UTF-32: 固定长度(4字节),处理简单,但存储效率较低。GBK: 双字节编码标准,主要用于简体中文。BIG5: 双字节编码标准,主要用于繁体中文。Shift_JIS。

CSUC的博客 1221

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java字符编码方式_java字符编码方式总结

java字符编码方式总结一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个...

weixin_34855166的博客 2899

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java字符编码方式总结

一、概要 在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。 二、基本概念 2.1 JAVA中字符的表达   JAVA中有char、byte、String这几个概念。char 指的是一个UN

轻锋的专栏 1082

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java中的字符编码方式

https://www.cnblogs.com/liujinhong/p/5995946.html

qq_41504815的博客 233

【转】刨根究底字符编码之十——Unicode字符集的字符编码方式

一、字符编码方式CEF的选择 1. 由于Unicode字符集非常大(并且作为开放字符集还在不断扩展之中),有些字符的编号(即码点值)需要两个或两个以上字节来表示,而要对这样的编号进行编码,也必须使用两个或两个以上字节。 比如,汉字“严”的Unicode编号以十六进制数表示为4E25,转换成二进制数有15位(100 1110 0010 0101),对“严”这个字符的编号进行编码的话,至少需要2个字节。表示其他更大编号的字符,可能需要3个字节或者4个字节,甚至更多。 2. 这带来两个问题: 一是,如

sinolover的专栏 698

java字符编码方式_java字符编码方式总结教程

一、概要在JAVA应用程序特别是基于WEB的程序中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解JAVA是如何处理字符的,这样就可以有目的地在输入/输出环节中增加必要的转码。其次,由于各种服务器有不同的处理方式,还需要多做试验,确保使用中不出现乱码。二、基本概念2.1 JAVA中字符的表达JAVA中有char、byte、String这几个概念。char 指的是一个UNICODE字符,为1...

weixin_28840143的博客 582

字符编码方式基本知识

字符编码方式基本知识 ASCII:基本字符集是128个常用字符,扩展字符集是128个,共256个,用1个字节表示。GB2312:6千多个常用汉字GBK:1万多个汉字GB18030:更多,不过依然是两个字节来表示汉字。上面三种GB*可以统一称为ANSI编码,且16个bit的第一个必定是1。BIG5:繁体字符集,用于台湾地区Unicode:两字节表示的世界通用码,存储为文本时会有连个字节的

486

java中的字符编码方式

from https://www.cnblogs.com/liujinhong/p/5995946.html 1. 问题由来 面试的时候被问到了各种编码方式的区别,结果一脸懵逼,这个地方集中学习一下。 2. 几种字符编码的方式 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256...

zymx(u010820135)的专栏 4322

各种字符编码方式详解及由来

各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)(1)2009-03-16 10:37:45 www.hackbase.com  来源:互联网   一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let's go!   很久很

uyehniy的专栏 436

字符编码方式(即转换为字节的方式)

Unicode符号集   它包含了世界上所有的符号,并且每一个符号都是独一无二的.Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储.   Java中字符是采用Unicode符号集。 GB2312&amp;GBK   GB2312是国家制定的汉字编码标准,使用双子节进行编码,共收入6763个汉字和682个非汉字图形字符。GBK即对国标编码的扩展,在GB2...

u010308357的专栏 3147
上一篇: 3.1Python之WMI
下一篇: 图形处理之自定义纹理映射Filter
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值