程序员永远的痛之字符编码的奥秘

       字符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在linux上,因为上面很多软件都是针对 英语国家开发的,是不会考虑其他语种编码问题。在遇到编码的无数大坑之后,我决定仔细研究下编码问题,因为这就像一道坎一直横在你面前,每次到这里你都会 跌到,每次爬起来之后,你都若无其事,这样的人被称作战士,真正的战士。可惜是个力量战士,做为新时代的智力战士,当然不能在那跌到然后又在这继续跌到。

     文件的存储方式:
     文件都有自己的存储格式,比如最常见的txt,cpp,h,c,xml ,png, rmvb各种格式,还有自定义格式。这些文件不论是什么格式,都是存储在计算机硬盘里的2进制格存储,对应不同文件格式,有不同的软件解析。这篇文章不谈 文件是如何存储的,只谈文件是如何解析的。
     文本文件解析:
     文本文件对应于人类可以阅读的文本,如何从2进制转换为文本文件呢?起初由于计算机在美国发明,自然大家考虑的是英语如何表示,英语字母总共26个,加 上特殊字符,128个字符,7位既一个byte即可表示出来。这个就是大家所熟知的ascill编码。对应关系很简单,一个字符对应一一个byte。
     但很快发现,其他非英语国家的文字远远超过ascill码,这时候大家当然想统一字符编码,不同国家出了自己不同的编码方式,中国的gb2312就是自 己做出来的编码方式,这样下去每个国家都有自己的编码方式,来回转换太麻烦了。这时候出现了新的编码方式,unicode编码方式,想将编码统一,所以规 定了每个字符对应的unicode码。
     1、很多文件都是ascii编码,如果用unicode 太浪费。
     2、没有标志位说明该几个字节来解析为一个符号。
     这时候拯救世界的utf出现了,utf是unicode的一种实现,只不过更聪明了。utf16是占用两字节,或者四字节,utf32是占用四字节。utf8是很聪明的一种表示方式。
     1、对于单字节符号,字节第一位为0,后面7位表示字节编码。
     2、对于n字节符号,第一字节的前n位都设为1,第n+1位为0,其余位为编码位置。
对于不同的编码,在文本的最前方有不同的标志,unicode 通常有两位来表示分别是ff fe, 或者feff, fffe表示big-endian 编码feff表示litte-endian编码。utf8是efbbbf来开头的。可以看出来utf-8是自解释的,所以不用带这个标志文件,大多数程序 是可以识别的。但有些程序不能识别这个标志,比如php就会直接把这个标志当文本解析,不会忽略。相信很多遇到php输出文本解析乱码或者解析错误的同学 都遇到这样的问题。
    如何解决问题:
    如果有vim那最好不过了,去掉命令:
    set encoding=utf-8
    set nobomb
    添加命令:
    set encoding=utf-8
    set bomb
   或者使用notepad++自带的功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

awb数据怎么计算_白平衡自己主动(AWB)算法---2,颜色计算

本文说明了白平衡算法估计当前场景的色温过程.色温计算的原理并不复杂,但要做到,还是一道,认真做好每一步,这需要大量的测试,和算法一直完好.关于该过程首先简要:1, 取的图像数据,并划分MxN块,如果是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分量…

svn强制要求提交注释

2019独角兽企业重金招聘Python工程师标准>>> 看了N多资料,不知道为什么我总是不成功。现在终于测试成功了,下面是实际操作过程~~ 使用bitnami一键安装了subversion,在使用中,希望开发人员提交时必须输入日志内容&#…

Xamarin效果第五篇之ScrollView动态滚动效果

前面基于Xamarin做了一点效果;这不过年从老家回来一直成沉迷工作无法自拔,没时间来更新文章了;今天赶紧抽点时间再来更新一下效果;直接看看最终实现的效果:前台RadioButton的事件绑定选中状态绑定:后台对ScrollView的滚动处理:ScrollView的滚动对当前选中状态的修改&#xff1a…

How to change the text color in the terminal

You can open the file ~/.bashrc and then choose the force_color_promptyes otherwise, you can change the color in PSI. 注意:使用方法:# PS1自定义内容注意两边的单引号示例: PS1(\u\H \d \t)\$-------------------------------------…

9 个使用前必须再三小心的 Linux 命令

Linux shell/terminal 命令非常强大即使一个简单的命令就可能导致文件夹、文件或者路径文件夹等被删除。 在一些情况下Linux 甚至不会询问你而直接执行命令导致你丢失各种数据信息。 一般来说在 Web 上推荐新的 Linux 用户执行这些命令当然也有人哪些写过这代码的人不这么想因为…

C/C++之内存对齐

1、什么是内存对齐 计算机系统对基本类型数据在内存中放的位置做了限制,它们会要求这些数的首地址是一个数(一般为4和8)的整数倍,我们看下结构体的大小 #include <stdio.h> struct A {char a;int b; };int main() {printf("size of struct A is %d\n", sizeo…

生存下去

这个世界就是这么的无情&#xff0c;你改不了现势&#xff0c;现势就会改变你&#xff0c;毫无疑问。加油吧&#xff0c;只为一个目的&#xff1a;生存下去。

池化层在全连接层之间吗,了解最大池化层之后的全连接层的尺寸

In the diagram (architecture) below, how was the (fully-connected) dense layer of 4096 units derived from last max-pool layer (on the right) of dimensions 256x13x13? Instead of 4096, shouldnt it be 256*13*1343264 ?解决方案If Im correct, youre asking why …

Blazor University (3)组件 — 创建组件

原文链接&#xff1a;https://blazor-university.com/components组件所有呈现的 Blazor 视图都来自 ComponentBase 类&#xff0c;这包括布局、页面和组件。Blazor 页面本质上是一个带有 page 指令的组件&#xff0c;该指令指定浏览器必须导航到的 URL 才能呈现它。事实上&…

View controller-based status bar

info.plist文件中&#xff0c;View controller-based status bar appearance项设为YES&#xff0c;则View controller对status bar的设置优先级高于application的设置。为NO则以application的设置为准&#xff0c;view controller的prefersStatusBarHidden方法无效&#xff0c;…

C和指针之IO总结

1、流 io操作就是简单的从程序移进或移出字节的事情,这种字节流便称为流 2、流的两种类型,文本流和二进制流 1)、文本流:文本流是指在流中流动的数据是以字符形式出现 2)、二进制流:二进制流是指流动的是二进制数字序列,若流只有字符,则用一个字节的二进制ASCII码表示…

Codeigniter中创建LeanCloud云函数实现微信支付

2019独角兽企业重金招聘Python工程师标准>>> 经过摸索&#xff0c;与官方提供的slim无异&#xff0c;同样使用__invoke魔法函数即可&#xff0c;步骤如下&#xff1a; 1.config.php打开hook&#xff0c;即设置$config[enable_hooks] TRUE; 详情文档参见&#xff1a…

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi&#xff0d;基于python和R语言 最近follow了MOOC上一门python课&#xff0c;开始学Python。同时&#xff0c;买来了概率论与数理统计&#xff0c;准备自学一下统计。&#xff08;因为被鄙视过不是统计专业却想搞数据分析&#xff09; 有趣的是书里面有一块讲…

51单片机智能小车循迹完整程序_电气与信息工程学院双创协会开展循迹小车培训...

为培养青年学子创新意识和创新能力&#xff0c;激发勇于创新的主动性和积极性&#xff0c;营造良好科技创新氛围&#xff0c;10月29日至30日&#xff0c;电气与信息工程学院双创协会于一教609、三教102和三教202开展循迹小车培训&#xff0c;该培训由电子1841班游碧文和电子184…

关闭C#主窗体弹出是否关闭对话框

在开发系统时,常常有这样一个问题,就是当关闭主窗体,也即退出系统时,如果想提示是否关闭,以免误操作,可以在主窗体的Main_FormClosing事件中添加一个对话框,代码如下: private void Main_FormClosing(object sender, FormClosingEventArgs e) { DialogResu…

AdonisUI - 用于 WPF 应用程序的轻量级 UI 工具包,提供经典但增强的 Windows 视觉效果...

介绍用于 WPF 应用程序的轻量级 UI 工具包&#xff0c;提供经典和增强的 Windows 视觉效果几乎所有 WPF 控件的默认样式和模板可根据需要使用的其他样式以方便使用两种配色方案&#xff08;浅色和深色&#xff09;也可用于自定义样式支持在运行时更改配色方案支持其他自定义配色…

Internet概念与TCP/ IP分层模型

Internet是世界上规模最大、用户最多、影响最大的计算机互联网络。本模块介绍Internet的概念及TCP/ IP分层模型。 一、Internet的概念 Internet的概念&#xff08;也可认为是Internet的结构&#xff09;可以从以下几个方面理解&#xff1a; 从网络通信的观点来看&#xff0c;In…

Android之在eclipse编译项目出现unable to resolve target android-20解决办法

1、问题 eclipse编译项目出现unable to resolve target android-20 2、解决办法 在project.properties文件里面修改targetandroid-20为targetandroid-21

数据结构关键路径_数据结构与算法之关键路径_一点课堂(多岸学院)

关键路径梳理活动的顺序仅仅是拓扑排序可以完成的功能之一&#xff0c;更有价值的是估量完成整个事件的最短时间。比如生产一辆汽车&#xff0c;虽然安排员工、准备原始材料是先行条件&#xff0c;但是组装各种零部件是可以同时进行的&#xff0c;例如制造轮子和发动机、外壳等…

ARP-Address Resolution Protocol-地址解析协议

主要内容摘自&#xff1a;图解TCP/IP ARP是一种解决地址问题的协议。以目标IP地址为线索&#xff0c;用来定位下一个应该接受数据分包的网络设备的mac地址。 如果目标主机不在同一个链路上时&#xff0c;可以通过ARP查找下一跳路由器的MAC地址。 不过ARP只适用于IPv4&#xff0…