惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
博客园 - 叶小钗
AI
AI
T
Tor Project blog
Forbes - Security
Forbes - Security
W
WeLiveSecurity
博客园_首页
爱范儿
爱范儿
J
Java Code Geeks
B
Blog
G
GRAHAM CLULEY
aimingoo的专栏
aimingoo的专栏
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园 - 三生石上(FineUI控件)
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
Spread Privacy
Spread Privacy
F
Fortinet All Blogs
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog

博客园 - 红马天下

【原创】改造rails使支持gb2312编码 【转载】Rails使用gb2312/gbk与utf8共存的解决方案 【原创】Asp.Net从Windows Server 2003 32bit迁移到Windows Server 2008 64bit的找不到组件 这辈子一定要做一件有意义的事 【转载】软件缺陷管理基本概念 【转载】软件配置管理中的分支 【转载】我的Lean & Agile(精简和敏捷)经历(这才是最佳实践) 【转载】微软的管理模式真的值得吹嘘么? 【转载】负载均衡技术全攻略 【转载】MySpace的六次重构 【转载】转一篇自己的书评,关于《重构》 【转载】避免软件重建失败的三种方案 【转载】ASP.NET AJAX进度条 【转载】快速、可伸缩和流式的AJAX代理--跨域持续内容分发 给CHtmlEditView添加自定义拖拽功能IDropTargetpdwEffectDROPEFFECT_COPY ole拖放的若干tips 深入分析eXtreme Toolkit Toolbar的Command消息 【转载】让文档模板支持多文件扩展名 在eXtreme Toolkit Pro 11.2.1中使用中文
【原创】MBCS,Unicode,UTF8以及一个用C++读写UTF8文件的工具类
红马天下 · 2008-06-21 · via 博客园 - 红马天下

    其他的没什么好说的,直接看代码即可,唯一一个需要说明的是,C++中常用的三种字符编码:MBCS,Unicode,UTF8,新手一般会在这个问题上犯糊涂。
    MBCS是变长字节编码,具体的编码由操作系统确定,实际上是操作系统的内码。如在简体中文操作系统中,其编码是GB18030(GB2312的超集);在繁体中文操作系统中,其编码是BIG5。对于GB18030,其英文字符编码与ASCII码值相同,用单字节编码,中文字符则用双字节编码,其值为字符对应的区位码值。
    Unicode是双字节编码。其英文字符编码也与ASCII码值相同。不同之处在于,即使英文字符也用双字节表示,其第一个字节值为0,第二个字节为对应的ASCII码值。对于汉字,与GB18030的不同之处在于,相同汉字的编码值不同,不是汉字的区位码值,而是Unicode编码值。
    UTF8也是变长字节编码。其英文字符编码也与ASCII码值相同,但只用一个字节编码;对于汉字等字符,则用三个字节编码。
UTF-8编码的最大长度是4个字节。
    从以上的说明可以看出,存储一个相同的中英文混合的文本文件,MBCS和UTF8编码的文件要比Unicode编码的文件小,这是因为前两者对英文字符都使用单字节编码,更节省空间的缘故。实验中还发现,MBCS比UTF8文件的大小要稍小,这是因为UTF8保存汉字需要更多字节的缘故。
    在计算机对这三种文字编码的处理效率上,Unicode编码要比MBCS和UTF8编码的效率高。这是因为Unicode是定长编码,在处理过程中不需要判断下一个字符的开始位置,因而处理效率高。在C++中,如果开启Unicode编码,则程序中的所有字符就是Unicode编码。如果需要保存为UTF8编码,必须手工处理。
    附件是C++中读写UTF8文件的工具类。想当初我在互联网上到处寻找读写UTF8的C++方法,遍寻不得,希望能够给后来人给予帮助。附件中的CDirectory类是我在项目中使用的文件夹操作函数。

    代码下载

posted on 2008-06-21 17:05  红马天下  阅读(4319)  评论()    收藏  举报