如何判断文本的编码格式以及编码格式转换

0 前话

我相信不少程序员遇到过这样的问题:在程序里写了一段代码读文件里面的文本内容,一运行显示出来却是乱码。

为什么会乱码?
这是因为那个文件的编码格式和代码里处理文本时认为的编码格式不一样。比如,你新建了一个MFC工程,把Character Set设置为了Use Unicode Caracter Set(MFC工程默认为这个设置),然后你写了一段代码去读一个文本文档,这个时候MFC直接认为你这个文本文档就是unicode编码格式,当你的文本文档不是unicode编码时就会出现乱码。
这个道理其实很简单。假如你只懂中文,而且只会用中文去处理你看到的文档信息,有一天,你看到一篇英文文档,你把英文当成中文拼音看,你的解读就会和原文有很大出入,有的英文单词可能刚好和某个拼音对应,比如“he”英文的意思是“他”而按拼音来你可以理解为“呵”“河”“喝”之类的,但你绝对不会认为是“他”的意思。有的英文单词并不能构成完整的拼音,这个时候你就会心里嘀咕“麻蛋,这啥玩意儿?!”,于是你就一团乱麻了。当你用中文去解读日文时,看到那些奇形怪状的符号你肯定会更加一团乱麻,因为用拼音都无法解读。

那么,什么是编码格式?有哪些编码格式?如何判断从文本文档读取的文本内容是什么编码格式的?如何转换编码格式?
本文就以上几个问题展开讨论,并尝试给出解决方案。其实本人也是小白,有什么说的不对的地方请各位指正,谢谢!

本文内容及代码参考了网上其他网友写的一些文章,参考链接会在本文适当地方或文末给出,如有侵权,请联系我。
如果要转载本文,请以链接形式注明出处。

1 字符集和字符编码

1.1 字符集

字符集(Charcater Set或Charset)是一个系统支持的所有抽象字符的集合,也就是一系列字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有:ASCII字符集、GB2312字符集(主要用于处理中文汉字)、GBK字符集(主要用于处理中文汉字)、Unicode字符集等。

1.2 字符编码

字符编码(Character Encoding)是一套法则,使用该法则能够对自然语言的字符的一个字符集(如字母表或音节表),与计算机能识别的二进制数字进行配对。即它能在符号集合与数字系统之间建立对应关系,是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息,而计算机的信息处理系统则是以二进制的数字来存储和处理信息的。字符编码就是将符号转换为计算机能识别的二进制编码。

1.3 字符集和字符编码的关系

一般一个字符集等同于一个编码方式,ANSI体系(ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符)的字符集如ASCII、ISO 8859-1、GB2312、GBK等等都是如此。一般我们说一种编码都是针对某一特定的字符集。
一个字符集上也可以有多种编码方式,例如UCS字符集(也是Unicode使用的字符集)上有UTF-8

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值