Unicode, ANSI, UTF8

如何gbk转unicode、gbk转utf8、ansi转unicode、ansi转utf8、tchar转ansi、ansi转tchar? 如何gbk转unicode、gbk转utf8、ansi转unicode、ansi转utf8、tchar转ansi?很多人在编码过程中经常会遇到处理字符串的编码,比如gbk、unicode、utf8等, 实际上字符串还是那个字符串,但是由于存储的格式不同,所以才有那么多的编码。 后来微软又在其VS中搞出来一个tchar,其实就是一个可变格式, 如果你的项目是使用多字节字符集,那么就会变为char,对应于ansi编码, 如果你的项目是使用unicode字符集,那么就会变为wchar_t,对应于unicode编码 阅读详情
                                      

 

1字节就是1个字节,包括8位二进制数字

Unicode是为了开发类似亚洲语言应用而实现的一种字符集.  
所有16位的应用程序使用ANSI字符集,32位应用可以使用Unicode   和ANSI两种.

UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:
  以"I am Chinese"为例
   用ANSI储存:12 Bytes
   用Unicode/UCS2储存:24 Bytes + 2 Bytes(header)
   用UCS4储存:48 Bytes + 4 Bytes(header)

  以"我是中国人"为例
   用ANSI储存:10 Bytes
   用Unicode/UCS2储存:10 Bytes + 2 Bytes(header)
   用UCS4储存:20 Bytes + 4 Bytes(header)

  由此可见直接以Unicode/UCS的原始形式来储存是一种极大的浪费,而且也不利于互联网的传输(中文稍为合算一点^_^)。

  有见及此,Unicode/UCS的压缩形式--UTF8出现了,套用官方网站的首句话『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也适用于编码UCS,故亦可称为『UCS transformation formats (UTF)』

  UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中。


编码原理

先看这个模板:

UCS-4 range (hex.) UTF-8 octet sequence (binary)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

编码步骤:
1) 首先确定需要多少个8bits(octets)
2) 按照上述模板填充每个octets的高位bits
3) 把字符的bits填充至x中,字符顺序:低位→高位,UTF8顺序:最后一个octet的最末位x→第一个octet最高位x
4) 解码的原理一样。

实例:(留意每个bit的颜色,粗体字为模板内容)

UCS-4 UTF-8
HEX BIN Bytes BIN HEX Bytes
0000 000A 00001010 4 00001010 0A 1
0000 0099 10011001 4 11000010 10011001 C2 99 2
0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3

  不知大家看懂了没有,其实不懂也无所谓,反正又不用自己算,程式可以完全代劳。

  以UTF8格式储存的文件档首标识为EF BB BF。


效率

  从上述编码原理中得出的结论是:
   1.每个英文字母、数字所占的空间为1 Byte;
   2.泛欧语系、斯拉夫语字母占2 Bytes;
   3.汉字占3 Bytes。

UTF8的好处:
数据表现:网页可以显示任何语言和文字,只要你的操作系统支持unicode,还有相应的字体,Linux下系统编码为utf8的话,可以解决很多无谓的中文问题,比如mp3播放器或者gtk2.
数据交换:无需那些gb2312和big5之间的转换程序了.
php里著名的"許功蓋"问题,smarty的问题,都可以很好的解决,这方面的以后扩展来介绍:

 

UTF8的坏处:
用的中文网站还不多,不利于数据交流.
汉字为三个字符,有时varchar不大够用.


不过总体来说还是利大于弊,所以一直用吧

[C/C++]_[Unicode转Utf8,Ansi转Unicode,Ansi文件转Utf8文件] 场景: 1.也就只有windows需要那么麻烦,还搞一个ANSI编码。学学mac os x,只需要一个utf8就行。 2.有时候需要把ansi文件内容转换为utf8编码,读取一行之后,把ansi字符串转换为utf8,之后写入文件。 #include #include #include #include #include char* Unicode2Utf8(const 阅读详情

相关推荐

一文带你弄懂C++中的ANSI、Unicode和UTF8三种字符编码及相互转换

本文详细介绍ANSI、Unicode和UTF8三种字符编码以及它们之间的相互转换,并给出了实际问题实例。

dvlinker的技术专栏 2万+

unity Zip 解压工具 配合 utf-8解压不乱码

using System; using System.Collections; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Zip; using UnityEngine; public class ZipTool { /// <summary> /// 简单创建压缩Zip文件 /// </summary> /// <param name="fileNames"&gt...

什么风把您给吹来了 824

utf-8编码转换工具.zip

该程序支持.c  .h  .cpp  .hpp .bat .java等6种格式的文件编码转换,如果需要添加其他格式的文件,直接修改suffix的条件判断处的语句即可,压缩包中提供exe程序和python写的源码

解决压缩包内乱码问题

问题: 用好压打开同事给发的压缩包后,打开查看和解压的文件夹里面文件名都是乱码。截图如下: 原因: 1.编码方式不一样。像linux下文件名是用UTF-8编码,win32下文件名是用GBK编码。 2.使用不同压缩软件压缩的,比如你打开的这个压缩包是winrar压缩的,用好压打开就会文件名乱码 解决: 用好压软件打开压缩包,在“选项

jasonkent27的专栏 4万+

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1904

macOS 发票查验全攻略:从证书导入到Safari调试

本文详细介绍了在macOS上进行发票查验的全流程,包括证书下载、钥匙串访问导入、Safari浏览器调试等关键步骤。重点解决了验证码不显示等常见问题,提供了证书信任设置和开发者工具使用的实用技巧,帮助用户顺利完成税务发票在线查验。

weixin_29204749的博客 544

【免费下载】 UTF-8编码转换工具

UTF-8编码转换工具 【下载地址】UTF-8编码转换工具 本仓库提供了一个名为“utf-8编码转换工具.zip”的资源文件,该工具主要用于将指定格式的文件从其他编码格式转换为UTF-8编码。该工具支持多种编程语言文件的编码转换,并且提供了可执行文件和源代码,方便用户根据自己的需求进行定制和使用 ...

gitblog_09800的博客 1969

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3542

【免费下载】 轻松实现文件编码转换:UTF-8编码转换工具推荐

轻松实现文件编码转换:UTF-8编码转换工具推荐 【下载地址】UTF-8编码转换工具 本仓库提供了一个名为“utf-8编码转换工具.zip”的资源文件,该工具主要用于将指定格式的文件从其他编码格式转换为UTF-8编码。该工具支持多种编程语言文件的编码转换,并且提供了可执行文件和源代码,方便用户根据自己的需求进行定制和使用...

gitblog_09754的博客 1576

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

PCL点云处理之计算点到空间直线距离的四种方法(二十三)

PCL点云处理之计算点到空间直线距离的四种方法

weixin_44329757的博客 3019

ANSI,UNICODE,UTF8之间的相互转换

转载自:https://blog.youkuaiyun.com/bajianxiaofendui/article/details/83302855 ANSI,UNICODE,UTF8之间的相互转换 ANSI转UNICOE UNICODE转ANSI UTF8转UNICODE UNICODE转UTF8 ANSI转UTF8 UTF8转ANSI ANSI,UNICODE,UTF8编码的区别参考博客ANSI,UNICODE和UTF8的区别 ANSI转UNICOE std::wstring AnsiTo.

WZY31014332886的专栏 554

【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

1 坐标系定义及转换   首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换: Xworld = RXcamera + t   那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可): Xcamera = RTXworld - RTt   所以,两个坐标系之间的转换,需要看其具体

zeeq的博客 2万+

c++ ansi utf8 linux,c++ ANSI、UNICODE、UTF8互转

c++ ANSI、UNICODE、UTF8互转博主:educast 发表时间:2014-01-25 09:05:45 浏览量:1861staticstd::wstringMBytesToWString(constchar*lpcszString);staticstd::stringWStringToMBytes(constwchar_t*lpwcszWString);static...

weixin_39784460的博客 218

基于STM32的浴室环境智能控制系统设计

摘要:本文设计了一款基于STM32F103的智能卫浴系统,通过多传感器协同检测浴室环境参数。系统采用DS18B20检测环境与卫浴温度,DHT11监测湿度,MQ-135检测空气质量,光敏电阻测量光照强度,D203S人体热释电模块检测人员存在。当检测到异常参数时,系统自动启动相应调节功能:温度异常时控制加热/制冷继电器,湿度过高时启动通风除湿,空气质量差时进行换气,光照不足且有人时自动开灯。系统支持按键、蓝牙APP和语音三种控制方式,可手动设置参数阈值、切换防雾模式、控制音乐播放等功能。实验结果表明,该系统能有

3254968421的博客 482

自动化控制软件:Beckhoff TwinCAT二次开发_(7).HMI开发基础

TwinCAT HMI是Beckhoff公司为TwinCAT自动化平台开发的专用HMI软件。Web技术基础:基于Web技术,支持HTML5、CSS3和JavaScript,可以轻松集成第三方库和框架。多平台支持:可以在多种设备上运行,包括PC、平板电脑和智能手机。高效开发:提供丰富的组件库和开发工具,简化开发过程。安全性:支持多种安全机制,确保数据和系统的安全性。可扩展性:支持自定义组件和脚本,满足不同应用场景的需求。Button:按钮组件,用于触发操作。Label:标签组件,用于显示文本信息。

2401_87715305的博客 977

详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换

目录1、概述2、Visual Studio中的字符编码3、ANSI窄字节编码4、Unicode宽字节编码5、UTF8编码6、如何使用字符编码7、三种字符编码之间的相互转换(附源码)7.1、ANSI编码与Unicode编码之间的转换7.2、UTF8编码与Unicode编码之间的转换7.3、ANSI编码与UTF8编码之间的转换8、Windows系统对使用ANSI窄字节字符编码的程序的兼容9、字符编码导致程序启动失败的案例1、概述在日常的软件开发过程中,会时不时地去处理不同编码格式的字符串,特别是在处理文件路径的

smartDMer的专栏 6550

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[C++]Unicode转Utf8,Ansi转Unicode,Ansi转Utf8

2.有时候需要把ansi文件内容转换为utf8编码,读取一行之后,把ansi字符串转换为utf8,之后写入文件。1.也就只有windows需要那么麻烦,还搞一个ANSI编码。学学mac os x,只需要一个utf8就行。//1.构造一个ansi文件,内容是"中文abc",看hex编码.

FL1768317420的博客 582

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

转载 ANSI、Unicode、UTF8相互转化的函数

http://stdsoft.blogbus.com/logs/56468290.html static wstring ANSI2Unicode(const string &amp; strin)            {                wstring strout;                 // 预计算所需空间大小(已包含结束字符),单位wchar_t     ...

weixin_34124651的博客 111

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c++对编码格式ANSI utf8 unicode 进行转换

Windows下有很多种编码格式,在与别的系统环境中有文件传输或通信时,这些编码就很重要。 比如在windows中换行是\r\n 在linux或mac下是\n,如果不对编码进行转换就会出现乱码。在通信中一般会有ASCII码和二进制码传输,如果是用二进制码在不同的系统环境中进行数据传输,在解析数据时必须进行转换,否则可能会出现数据错误。 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以

c914620529的博客 9817

C++中Ansi、Unicode、UTF8字符串之间的转换

Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Unicode字符串,每个字符(汉字、英文字母)都占2个字节,以2个连续的\0结尾,NT操作系统内核用的是这种字符串,常被定义为typedef unsigned short wchar_t;所以我们有时常会见到什么char*无法转换为unsigned short*之类的错误,其实就是unicode U

我爱学习 908

c++ ANSI、UNICODE、UTF8互转

c++ ANSI、UNICODE、UTF8互转     static std::wstring MBytesToWString(const char* lpcszString);     static std::string WStringToMBytes(const wchar_t* lpwcszWString);     static std::wstring UTF8ToWSt

无敌的专栏 1012

C语言UTF8到ANSI和Unicode转换代码

C语言UTF8到ANSI和Unicode转换代码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了一个使用C语言实现的UTF8、Unicode和ANSI字符集互转的代码资源。该资源包含头文件和源文件,可以直接引入到你的工程中使用。如果你在MFC项目中使用该代码,需要根据压缩包中的详细说明进行配置更改。 功能描述 UTF8到ANSI转换:将UTF8编码的字符串转...

gitblog_09779的博客 830

Ansi、Unicode、UTF8字符串之间的转换和写入文本文件

Ansi、Unicode、UTF8字符串之间的转换和写入文本文件 转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题,就此写一篇blog Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Unicode字符串,每个字符(汉字

pirate97的专栏 928

Ansi,UTF8,Unicode编码

1.三种编码的回顾 Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个/0结尾,常用于txt文本文件。  Unicode字符串,每个字符(汉字、英文字母)都占2个字节;在VC++的世界里,Microsoft比较鼓励使用Unicode,如wchar_t。  UTF8是Unicode一种压缩形式,英文A在unicode中表示为0x0041,英语中这种存储方式太浪费,因为浪费了50%的

luoye7422的专栏 444
上一篇: JAVA你熟吗?
下一篇: 闲话unsigned
sunappro
博客等级 码龄20年 3粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值