首页 > 其他分享 >从底层逻辑证明,编写一个能准确识别不带BOM的文本文件编码是GBK还是UTF8是不可能的

从底层逻辑证明,编写一个能准确识别不带BOM的文本文件编码是GBK还是UTF8是不可能的

时间:2024-12-25 12:20:19浏览次数:1  
标签:编码 存储 字节 字符 UTF8 GBK GB18030 BOM

声明:本文为原装文章,转载请注明出处。
经常处理文本文件的小伙伴,有个很头疼的事情,就是如何准确识别一个文本文件到底是什么编码方式,ANSI(也就是GBK)还是UTF8。
文本文件,是指以特定的文本编码将每个字符逐个字节存储的一种文件格式,文本文件的常见的扩展名是.txt ,但又不一定是.txt,例如常见的CSV文件,其实就是文本文件。
既然是文本文件,在使用特定的程序去读取时,就需要知道文本文件的编码,解码和编码只有一致,才能完整还原文件中存储的文字信息。
GBK、GB2312、GB18030、Unicode、UTF8、UTF16、UTF32都是些什么意思呢?
相信小伙伴们已经提前对这些有所了解,长话短说,GBK、GB2312、GB18030、Unicode 这个四个是字符的编码集,其中,GB18030兼容GBK、GB2312,GBK兼容GB2323。而Unicode 和GBK、GB2312、GB18030 互不兼容。
而UTF8、UTF16、UTF32并不是字符集,而是三种存储Unicode字符的存储方式。
以下问题小伙伴们可能会很疑惑:
1、GB18030、GBK、GB2312能不能举个例子
比如汉字“

标签:编码,存储,字节,字符,UTF8,GBK,GB18030,BOM
From: https://www.cnblogs.com/honphi/p/18630106

相关文章

  • 【随手记录】Apache POI 报错:Zip bomb detected! The file would exceed the max. rat
    1、背景:使用POI解析Excel报错:Zipbombdetected!Thefilewouldexceedthemax.ratioofcompressedfilesizetothesizeoftheexpandeddata。Thismayindicatethatthefileisusedtoinflatememoryusageandthiscouldposeasecurityrisk.Youcanadj......
  • 什么是文件的BOM头?
    文件的BOM头(ByteOrderMark)是用来判断文本文件是哪一种Unicode编码的标记。它本身是一个Unicode字符("\uFEFF"),位于文本文件头部。BOM头的主要作用在于标识文件的编码格式,以便于软件或系统能够正确地解析和显示文件内容。关于文件的BOM头,可以进一步从以下几个方面进行解释和归纳:......
  • 请解释下utf8和utf8mb4的区别
    utf8和utf8mb4的区别主要体现在对Unicode字符的支持范围、编码的最大字符长度以及存储空间需求上。以下是对这两者区别的详细解释,特别从前端开发的角度进行阐述:Unicode字符支持范围:utf8:主要支持Unicode字符集中的基本多语言平面(BMP)范围内的字符,即码点范围从0x0000到0xFFFF。......
  • 中电金信成为开源风险评估与治理技术实验室软件物料清单(SBOM)工作组成员单位
    近期,中电金信成功加入国家工业信息安全发展研究中心开源风险评估与治理技术实验室软件物料清单(SBOM)工作组,成为其成员单位,并同步加入“筑链计划”之中。   SBOM是SoftwareBillofMaterials的缩写,中文名为软件物料清单,SBOM不仅提供了软件项目所用组件和依赖项的详细清单,而......
  • 前端学习7—BOM
    1BOM概述BOM为浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象,它的核心是windowDOM和BOM的区别:DOM:文档对象模型DOM就是把文档看做一个对象来看待DOM的顶级对象是documentDOM主要学习的是操作页面元素DOM是W3C标准规范BOM:浏览器对象模型把......
  • 43. JavaScript流程控制、函数、对象、BOM、DOM
    1.流程控制1.1if判断[1]单if分支if(条件){条件成立运行的代码}[2]if...else分支if(条件){条件成立运行的代码}else{条件不成立运行的代码}vara=10;if(a>=20){console.log("ok")}else{console.log("g......
  • New-Bom-BomService
    好的,我们将根据之前的内容,专注于实现应用层的CQRS(命令查询职责分离)模式。CQRS是一种架构模式,它将读取操作与写入操作分离,通常使用不同的模型来处理命令和查询。我们将使用MediatR库来简化CQRS的实现,并确保每个部分都清晰明了。安装MediatR首先,在MyCc.Application和M......
  • CS211 Defusing a Binary Bomb
    CS211: Fall 2024Defusing a Binary BombDue: December 15th,2024CS211Sections 5 - 81    IntroductionThe nefarious Dr. Evil has planted a slew of “binary bombs” on our class machines. A binary bomb is a programthatconsis......
  • python批量将文件编码格式转换为 UTF8带标签的格式,解决linux环境下中文编码乱码的问题
    指定一个文件夹,遍历文件夹内的文件和子文件夹内的文件,然后识别文件后缀为cpp的文件,通过chardet取检测文件的编码格式,如果不是UTF-8-SIG,则转换为UTF-8-SIGpython脚本格式如下importosimportsysimportcodecsimportchardetdefconvert(filename,out_enc="UTF-8-SIG"):......
  • BOM操作
    一、什么是BOMBOM(BrowserObjectModel)是浏览器对象模型。二、DOM和BOM区别:浏览器的全部内容可以看作是DOM;整个浏览器可以看成是BOM,区别如下:1.DOM是文档对象模型;BOM是浏览器对象模型2.DOM把文档当做一个对象来看待;BOM是把浏览器当做一个对象来看待......