文本文件的编码详解

        今天在程序调试时,程序中用到一个config.json文件,是UTF-8的格式,这是在win11的nodtepad中显示的编码格式,但复制到win7中使用时,出现一个奇特的现象,报文件格式错误,说出现一个特殊字符不识别,这个特殊字符像一个字母i上面有两点的一个特殊字符,但经过目视检查,没有任何问题,百思不得其解,最后还是chatgpt厉害,直接给出了原因和答案。
说这是一个UTF-8 BOM格式,导致的不兼容,解决办法是换成ANSI格式或再转换成标准的UTF-8格式,问题解决。
        但怎么会出现这种问题的呢?有必要对文本文件的编码,再做详细的梳理。在win7或以前的系统中的notepad,支持ANSI、unicode、unicode big endian、UTF-8四种格式,如下图所示:

在win11的notepad中,支持ANSI、UTF-16 LE、UTF-16 BE、UTF-8、UTF-8 BOM、GB18030六种格式,如下图所示:

UTF,是Unicode Transformation Format"的缩写。Unicode是一种标准字符集,而UTF则是一种用于在计算机中存储和传输Unicode字符的编码方式。
下面,对这几种编码格式进行一一解释:

1、ANSI(ASCII):

使用单字节编码,通常每个字符占用一个字节。
仅支持128个基本ASCII字符。
2、UNICODE:

使用两个字节编码,允许表示更多字符,包括国际字符。
提供了对全球范围内字符的支持。
3、UNICODE BIG ENDIAN:

和Unicode相似,但是字节顺序是大端序,即高位字节在前。
4、UTF-8:

使用变长字节编码,一个字符可以由1至4个字节组成。
兼容ASCII,对英文字符使用一个字节,同时支持包括中文在内的多语言字符。
5、UTF-16LE:

使用两个字节编码,但是字节顺序是小端序,即低位字节在前。
6、UTF-16BE:

和UTF-16LE相似,但是字节顺序是大端序,即高位字节在前。
7、UTF-8 BOM(Byte Order Mark):

UTF-8编码中的一个特殊标记,占用三个字节(0xEF, 0xBB, 0xBF)。
用于标识文本文件使用了UTF-8编码,同时指定字节序。

        这些编码方式中,ANSI、UNICODE和UTF-8是最常见的。UTF-8因为其灵活性和对多语言的支持,成为现代互联网中广泛使用的标准编码方式。UTF-16用于某些系统和应用,但在Web开发中并不常见。

        BOM是可选的,不是所有UTF-8文件都包含BOM。在UTF-8编码文件中使用BOM可以帮助解释器识别编码方式,但有时也可能引起一些问题,因此在实际使用中需要注意。

        由此可见,要特别注意UTF-8和UTF-8 BOM的区别,在win7以前的系统上,并不能识别出来,导致程序兼容性问题。如果用二进制打开文本文件,开头为:0xEF, 0xBB, 0xBF则为UTF-8 BOM格式。

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

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

相关文章

ArkUI新能力,助力应用开发更便捷

ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用户体验。随着HarmonyOS 3.1版本的发布&a…

低代码(Low-Code)技术简化开发难度,快速搭建应用

目录 一、低代码技术定义 二、低代码技术优势 1.提高企业的工作效率 2.降低企业的开发成本 3.提高应用程序和业务流程的质量 三、稳定性和生产率的最佳实践 三、最后 随着数字化时代的到来,低代码(Low-Code)技术已经成为了企业数字化转…

汽车网络架构与常用总线汇总

汽车CAN总线简述 CAN 是控制器局域网Controller Area Network 的缩写,1986年,由德国Bosch公司为汽车开发的网络技术,主要用于汽车的监测与控制,目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。…

TypeScript教程(一)在vscode中的配置TypeScript环境

TypeScript教程(一)在vscode中的配置TypeScript环境 文章目录 TypeScript教程(一)在vscode中的配置TypeScript环境一、前言二、具体步骤1、Node.js安装2、TypeScript安装3、helloworld 一、前言 未来的开发者们请上座&#xff0c…

kubeadm 安装k8s集群后,master节点notready问题解决方案

使用kubeadm 安装k8s集群后,加载calico cni 网络组件后,master节点notready问题 表现为: 使用命令查看日志:journalctl -f -u kubelet 报错如下: Failed to start ContainerManager failed to initialize top level…

[Linux]HTTP状态响应码和示例

1xx:信息响应类,表示接收到请求并且继续处理 2xx:处理成功响应类,表示动作被成功接收、理解和接受 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 4xx:客户端错误&#x…

webpack如何把dist.js中某个模块js打包成一个全局变量,使得在html引入dist.js后可以直接访问

webpack可以通过使用expose-loader来将模块中的一个js文件暴露为全局可以访问的变量。下面是一个示例代码: 1、安装expose-loader npm install expose-loader --save-dev 2、webpack.config.js配置文件 值得注意的是:我在本地使用16.14.2版本的node打包…

QT下载、安装详细教程[Qt5.15及Qt6在线安装,附带下载链接]

QT5.15及QT6的下载和安装 1.下载1.1官网下载1.2国内镜像网站下载 2.安装3.软件启动及测试程序运行3.1Qt Creator(Community) 1.下载 QT自Qt5.15版本后不在支持离线安装包下载(非商业版本,开源),故Qt5.15及Qt6需要使用在线安装程序…

Python tkinter (2) —— Button标签

Python的标准Tk GUI工具包的接口 目录 Button 简单示例 设置按钮宽高 设置响应事件 匿名函数调用事件 退出按钮 总结 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Button Button标签在窗口中显示按钮的控件。 简单示例 实现一个…

Offer必备算法_滑动窗口_八道力扣OJ题详解(由浅到深)

目录 滑动窗口算法介绍 ①力扣209. 长度最小的子数组 解析及代码 ②力扣3. 无重复字符的最长子串 解析及代码 ③力扣1004. 最大连续1的个数 III 解析及代码 ④力扣1658. 将x减到0的最小操作数 解析及代码 ⑤力扣904. 水果成篮 解析及代码1(使用容器&…

node 第二十二天 mongoDB最新版7.x安装教程

学习服务端其实就是学习数据库, 就web这一条线而言, 客户端的学习就是学习浏览器, 而服务端的学习就是学习数据库(当然还有服务器) 为什么学习mongoDB mongoDB是非关系型数据库(not only sql) 基本上补全了mysql的缺陷, 当然也缺失了部分mysql的优势. 当然, 非大型应用的业务场…

2023年第十六届中国系统架构师大会(SACC2023):核心内容与学习收获(附大会核心PPT下载)

大会以“数字转型 架构演进”为主题,聚焦系统架构在数字化转型中的演进和应用。 与往届相比,本届大会最大的变化是从原来的大会演讲模式变革为专题研讨会模式。专题研讨会主题内容紧扣行业落地实践痛点与难点,多角度聚焦行业的架构演进之路。…

vue3+ts+element-plus集成bpmn.js

Bpmn.js集成文档 说明: 本文档主要是作为集成,不是原创(主要是填写转载他又让我写原文链接,但是我又没有原文链接哈哈哈),感谢以下参考博文。 本项目页面模板使用Geeker-Admin作为前端模板Geeker-Admin&a…

大数据学习之Flink算子、了解(Transformation)转换算子(基础篇三)

Transformation转换算子(基础篇三) 目录 Transformation转换算子(基础篇三) 三、转换算子(Transformation) 1.基本转换算子 1.1 映射(Map) 1.2 过滤(filter&#xf…

教学改进措施及方法

在教育的世界里,每一位教师都是一位探险家,探索着如何更好地点燃学生的求知欲望,帮助他们展翅飞翔。我,作为一位拥有多年教学经验的教师,也在这条路上不断摸索。今天,我想分享一些我在教学实践中的改进措施…

数字与数学高频问题(算法村第十三关白银挑战)

数组实现加法专题 数组实现整数加法 66. 加一 - 力扣(LeetCode) 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数…

如何在 Ubuntu 20.04 上安装 Nginx

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 如何在 Ubuntu 20.04 上安装 Nginx 介绍 Nginx是世界上最受欢迎的 Web 服务器之一,负责托管互联网…

Mac Idea安装后无法启动

1、起因 想安装一个新版的idea2023.3.2,结果安装完之后直接无法启动 以为是卸载不干净,下载了一个腾讯柠檬,结果将2018版也一并卸载了 好家伙,彻底没得用 2、找原因 1)查看idea报错信息 网上找了一圈,其…

C++笔试强训选择题1

选择题 1.选择表达式 11|10 的结果(本题数值均为十进制)() A.11 B.10 C.8 D.2 11的二进制为1011,10的二进制为1010 1011 |(或)1010 1011 | 按位或 有1为1,& 按位…

归并排序详解

基本思想: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列&#xff1…