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

2023-05-16

     
    字符编码相信是每个程序员的噩梦,只要是有中文的地方,总是会遇到各种编码的问题,并且这种问题还非常难缠,尤其在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++自带的功能
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序员永远的痛之字符编码的奥秘 的相关文章

随机推荐

  • imu_utils IMU内参标定工具 imu_utils安装教程 imu_utils使用教程

    标题imu utils IMU内参标定工具 imu utils安装教程 imu utils使用教程 安装教程 xff1a 1 安装依赖项 sudo apt get install libdw dev 2 下载imu utils和code u
  • LARVIO代码学习以及基本框架

    LARVIO代码学习以及基本框架 最近由于项目原因 xff0c 对MSCKF进行了一定的研究 xff0c 在其基础上进行开发 xff0c 但是17年开源的代码不管是初始化还是后期跟踪 悬浮等问题 xff0c 均为解决 xff0c 在20年3
  • LARVIO 不能初始化问题

    LARVIO 不能初始化问题 在运行过程中 xff0c 发现存在一定bug xff0c 使用其他数据包时 xff0c 一致不能完成动态初始化成功 xff0c 最终发现 xff1a 在动态对准过程中 xff1a DynamicInitiali
  • LARVIO 安装并运行

    LARVIO 安装并运行 LARVIO是基于MSCKF框架开发的一款实时SLAM xff0c 具体开源代码 xff1a https github com PetWorm LARVIO 1 依赖 1 1 Ubuntu and ROS 环境为U
  • MSCKF_VIO算法框架

    SCKF VIO算法 1 MSCKF视觉惯性融合算法简介 惯性导航利用惯性测量单元 IMU 测量得到的角速度 加速度信息进行惯性导航解算得到运载体的位置 速度 姿态 含航向 等信息 xff0c 具有实时性好 动态性能好等优点 xff1b 但
  • First Estimate Jacobian (FEJ) 如何理解SLAM中的First Estimate Jacobian

    First Estimate Jacobian FEJ 如何理解SLAM中的First Estimate Jacobian First Estimate Jacobian是Visual Inertial中的一个很重要的概念 xff0c 今天
  • 移动开发者大会--除了App,软件,我们还应该考虑什么

    今天有幸参加 移动者开发大会 xff0c 也是我第二次参与这个活动了 随着智能机的普及 xff0c 尤其是安卓千元的手机迅猛发展 xff0c 2011年可以说事移动领域的积累期 xff0c 2012年将会是蓬勃的发展期 各大厂商也在努力学习
  • 野火的freeRTOS工程怎么移植到正点原子上

    目录 简介 xff1a 时钟 xff1a 串口波特率设置问题 xff1a 滴答时钟的中断的时长问题 xff1a 简介 xff1a 正点原子的freeRTOS教程和野火系列的对比跟玩一样 xff0c 教的不细致 xff0c 代码注释也还没有野
  • ORB特征点提取代码详解 四叉树均匀化

    ORB特征点提取代码详解 ExtractORB 最近在尝试将ORB提取特征点机制放置于芯片上 xff0c 便于后期调用 xff0c 减小CPU的计算负担 xff0c 故最近对ORB特征点提取代码进行了研读 xff0c 记录一下 xff0c
  • Docker 使用教程

    Docker 使用教程 1 基本使用教程 使用docker docker 下载镜像 span class token function sudo span span class token function docker span pull
  • os.popen os.system subprocess shutil区别

    os popen os system subprocess shutil 区别 最近由于工作需求接触python xff0c 记录下遇到的问题 1 os popen os system 的区别 xff1a 总结 xff1a os popen
  • json与pickle相同和区别

    json与pickle相同和区别 1 json是可以在不同语言之间交换数据的 xff0c 而pickle只在python之间使用 2 json只能序列化最基本的数据类型 xff0c 而pickle可以序列化所有的数据类型 xff0c 包括类
  • 【id:58】【20分】C. 复数运算(友元函数)

    时间限制 1s 内存限制 128MB 题目描述 复数类的声明如下 xff1a class Complex private double real 实部 double imag 虚部 public Complex Complex double
  • Melodic + Realsense D435i 配置及错误问题解决

    Melodic 43 Realsense D435i 配置及错误问题解决 安装环境 xff1a RealSense SDK安装1 克隆SDK2 安装相关依赖3 安装权限脚本4 进行编译与安装5 测试安装是否成功6 错误汇总0x01 进行编译
  • Realsense-Ros安装配置介绍与问题解决

    Realsense Ros安装配置介绍与问题解决 Realsense Ros安装配置功能包克隆与编译编译错误与问题分析解决方案 结束语 本文主要讲述在如何进行Realsense Ros的安装与配置 xff0c 以及提出在安装配置过程中遇到相
  • 树莓派3 Ubuntu Meta16.04 操作系统烧录教程及系统换源

    树莓派3 Ubuntu Meta16 04 操作系统烧录教程及系统换源 1 写在开头 xff1a 2 操作系统烧录软件下载3 Ubuntu Meta 操作系统下载4 操作系统烧录4 1 SD 存储卡格式化4 2 操作系统写入4 3 换源更新
  • Ubuntu nautilus 快速打开文件浏览器

    Ubuntu nautilus 快速打开文件浏览器 1 问题描述2 nautilus 命令说明3 bashrc 下使用 alias 创建命令别名Reference 测试时间 xff1a 2022年6月20日 测试平台 xff1a Ubunt
  • 结构体嵌套结构体,及其的初始化

    作用 xff1a 结构体的的参数成员包含另一个结构体 利用 操作符来逐级访问结构体中的元素 1 先来个普通的结构体嵌套 xff0c xff08 不涉及数组 xff09 span class token macro property span
  • Spark Streaming + Spark SQL 实现配置化ETL流程

    Spark Streaming 非常适合ETL 但是其开发模块化程度不高 xff0c 所以这里提供了一套方案 xff0c 该方案提供了新的API用于开发Spark Streaming程序 xff0c 同时也实现了模块化 xff0c 配置化
  • 程序员永远的痛之字符编码的奥秘

    字符编码相信是每个程序员的噩梦 xff0c 只要是有中文的地方 xff0c 总是会遇到各种编码的问题 xff0c 并且这种问题还非常难缠 xff0c 尤其在linux上 xff0c 因为上面很多软件都是针对英语国家开发的 xff0c 是不会