读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法

Windows Wowershell 和CMD显示中文乱码的真实原因和解决方法 编码页不是Winodws Powershell对中文字符乱码的真正原因 阅读详情
AI摘要

本文探讨了在读取文本时出现的锘系列错误现象及其原因,该问题通常发生在使用UTF-8编码且包含BOM签名的文件中。文章提供了多种解决方案,包括使用特定的文本编辑器去除BOM标志,以及通过Python脚本来处理此类问题。

现象

读取文本时经常会出现锘*系列错误。
例1:锘縣,其实开头的文本是h,http被显示为锘縣ttp
例2:锘缝,其实开头的文本是p,public被显示为锘缝ulic
只要文本的首字母为锘的都属于这类错误,在Python、Java、PHP等等使用过程中都会遇到,这类错误与语言无关,错误的原因是UTF-8的BOM。

原因

BOM即Byte Order Mark,是UTF-8文档的Unicode签名,即EF BB BF这三个字节,当把文件编码选为UTF-8时,系统会自动在文件头部添加上EF BB BF这三个字节,而选为UTF-8 NO BOM时会自动去掉这三个字节。
BOM是可选的,可以用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。
微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的,然而这个只是微软暗自作的标记,其它平台上并没有对UTF-8文本文件做个这样的标记。

解决办法

  1. 尽量使用notepad++,sublime,editplus等不直接加BOM的文本编辑器
  2. 使用ultraedit等二进制编辑器去除BOM
  3. 使用1中的编辑器重新打开文档并重新保存为以UTF-8无BOM格式编码。
  4. 将编码设置为ASCII,当然这也很多中文就麻烦了
  5. 用Python去除BOM
import codecs

data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
     data = data[3:]
print data.decode("utf-8")
Dev C++中文乱码终极解决方案:UTF-8编码统一与二进制读取实践 字符编码是计算机处理文本信息的基础,它定义了字符与二进制数据之间的映射规则。在C/C++编程中,标准库默认使用本地编码处理文本,当文件编码、程序内部编码与控制台显示编码不一致时,就会产生乱码问题。解决这一问题的核心在于统一编码标准,UTF-8因其跨平台兼容性成为首选。通过配置编译器选项、设置控制台代码页,并采用二进制模式读取文件,开发者可以精确控制数据流,避免编码错配。这一技术方案在文件处理、数据交换及国际化软件开发中具有重要价值,尤其适用于处理包含中文等多语言文本的场景。本文以Dev C++环境为例,深入 阅读详情

相关推荐

去除UTF-8文件中的BOM头:方法与技巧

在处理文本文件时,字节顺序标记(Byte Order Mark,简称BOM)是一个不可忽视的组成部分。BOM是位于文本文件开头的一组特定字节序列,用于标识该文件所使用的字符编码。例如,在UTF-8编码中,BOM由三个字节(EF BB BF)组成,而在UTF-16和UTF-32编码中,BOM则分别由两个或四个字节组成。BOM头不仅仅是一个简单的标识符,它还在数据交换和文件处理中扮演着至关重要的角色。对于文本编辑器和阅读器来说,BOM头的识别可以确保字符编码的正确读取,避免乱码现象的发生。

weixin_35671843的博客 1673

php网页顶端有乱码,PHP一键去除网页BOM属性 完美解决网页乱码等问题

最近一直在做泪雪网的整合,因为泪雪旗下也在不断发展子网站,而对于子网站在泪雪网的展示却没有一个良好的整合,所以目前泪雪旗下极客行网站已经完美的整合到泪雪网首页了,可能是之前自己本身技术能力有限吧,总是会觉得解决方案不是很好,所以现在在整合完毕,这也算是新的一年的进步吧!同时也告诉自己,不论有多忙,都不能忘记需要不断的学习和探索,只有这样才能不断的前进。。。泪雪网也将越来越健全了。因为泪雪网所使用的...

weixin_36238982的博客 219

EAGLE BOM跟坐标整理工具一个, 使用ECXCEL VBA编写-eagle_smt_bom.zip

EAGLE BOM跟坐标整理工具一个, 使用ECXCEL VBA编写-eagle_smt_bom.zip

【Java】javac 编译源文件出现“锘缝ublic”、“非法字符: \65279”的乱码情况

HelloWorld.java:1: 需要为 class、interface 或 enum 锘缝ublic class HelloWorld{ ^ 1 错误 这个错误出现的原因主要是在中文操作系统中,使用一贯的“javac HelloWorld.java”方式编译UTF-8(带BOM)编码的.java源文件,在没有指定编码参数(encoding)的情况下,默认是使用GBK编码。当编译器

CHIxFight的专栏 8194

SPWM波调制度原理

SPWM波调制度原理

qq_43557686的博客 1万+

Calpuff模型实战:从气象数据预处理到污染物扩散模拟全流程指南

本文提供了一份详尽的Calpuff模型实战指南,涵盖从气象数据预处理、地形处理到污染物扩散模拟与结果可视化的全流程。重点解析了Calmet气象场构建、Calpuff核心参数配置,并与AERMOD模型进行对比,帮助环境工程师与科研人员掌握这一强大的三维非稳态拉格朗日扩散模型,以应对复杂地形、海岸熏烟等实际模拟挑战。

s4t5u6v7的博客 458

程序读取文本文件之UTF8-BOM

一楼放图 以上是用java做一个简单的文件读取,在TXT中,我们的第一个字明明是A,但是打印的结果,确是一个问号。 发现问题 首先文件是UTF8格式,我们确定读取时候设置的格式无错,那我们检查一下NOTEPAD++文本编辑器中,的编码格式。显示当前文本格式为UTF8, 当然我们还发现,里面有一个选项是以UTF8-无BOM格式编码。经过尝试,当我们文件以UTF8无BOM时候编码时候,文件读取结果正常。那么我们可以肯定,问题是处在这个BOM上。那么我们对BOM到底是干啥的,给一个详细的解释。 编码格式说明

Himly_Zhang的博客 1872

汽车OBD接口实战:如何用STM32读取CAN总线数据(附完整代码)

本文详细介绍了如何利用STM32微控制器通过汽车OBD接口读取CAN总线数据的完整实战方案。内容涵盖硬件连接(如OBD引脚定义与TJA1050收发器接线)、STM32的CAN外设初始化与滤波器配置,并深入解析OBD-II诊断协议,演示了如何请求和解析发动机转速、车速等关键数据。文末提供了构建稳定数据读取系统的代码框架与错误处理建议,为嵌入式开发者和汽车电子爱好者提供了从零到一的实践指南。

9q8w7e6r5的博客 297

锘??xml 乱码的解决

读写一个XML文件,然后对文件内容进行加密(Base64),方便网络传输。发现生成的XML文件,总是这样的文件头:锘??xml version="1.0" encoding="utf-8"?> ,而不是原来的"xml version="1.0" encoding="utf-8"?>。 解决法方法是,将文件内容读取到一个XMLDocument 对象中,然后对内容更改/加密。接下来,如

kissjob的专栏 6832

Unity开发微信小游戏,使用Addressables管理游戏资源(本地进行远程测试)

快速构建Unity微信小游戏 使用Addressables管理游戏资源 使用小皮助手在本地进行远程资源加载测试

the_vnas的博客 6390

【系统分析师】2025年下半年真题:综合知识-答案及详解(回忆版)

本文摘要包含系统分析师考试相关题目解析,主要涵盖软件工程、数据库、网络协议和项目管理等知识点。内容包括:软件再工程与逆向工程的区别(D);GNU GPL开源协议特性(A);TCP/IP协议分层(A、B);数据库范式判定(A、B);前导图进度管理工具(C);系统规划中的数据类识别方法(B、D);关系代数除运算(C);CMM优化级特征(A);回归测试重要性(C)。这些解析帮助理解核心概念和考试重点。

数据知道的博客 6715

解决“对于常量池来说, 字符串 "..." 的 UTF8 表示过长”以及读取properties中文乱码的问题

用IDEA写程序时碰到了一个问题,读取写在常量类中的一个字符串时发生了错误 Error:(6, 8) java: 对于常量池来说, 字符串 "{"actualCapital":"",..." 的 UTF8 表示过长网上查了一下,是这个字符串的大小超过了65535个字节,也就是64K。的确,我的这个字符串长度大概是94K,超过了64K。 2. 解决方法:把这个字符串从常量类中挪到properties

飞天神猪 1万+

第8讲:基于CST PCB Studio的电源完整性仿真(IR Drop + PDN)

本文系统介绍了电源完整性(PI)仿真的两大核心模块:直流IRDrop仿真与交流PDN阻抗仿真。文章详细阐述了两种仿真的原理、算法(PEEC和3DFE-FD)及完整操作流程,包括参数配置、软件实操步骤和常见问题解决方案。IRDrop仿真用于分析直流供电压降问题,PDN仿真则针对高频电源噪声和谐振问题。文中还提供了优化建议和故障排查方法,如调整铜箔厚度、优化电容布局等,为高速数字系统的电源完整性设计提供了全面的技术指导。(149字)

一只豌豆象的博客 235

【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

先举个例子,分别以不指定编码、指定编码为 utf-8、指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一、不指定编码方式,直接存入 csv 文件 import csv with open('test.csv', 'w') as fp: writer = csv.writer(fp) writer.writerow(['汉语',...

BOB'S BLOG 1万+

硬核干货|C#+EtherCAT协议:高精度多轴伺服运动控制通信实战

本文摘要: 文章聚焦工业自动化领域多轴伺服运动控制的高精度与实时性需求,基于C#与EtherCAT协议实现完整解决方案。EtherCAT凭借微秒级同步、分布式架构等优势成为首选,而C#通过优化GC策略和实时线程可满足工业控制要求。文章从工程落地角度,详细拆解EtherCAT的PDO/SDO通信机制与多轴同步控制逻辑,提供完整的C#代码实现(主站初始化、伺服配置、运动控制等),所有代码均通过汇川/松下伺服实测验证。核心亮点包括:纯C#原生开发、工业现场高频问题解决方案、硬件适配指南,帮助开发者快速掌握高精度多

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 576

qcc514x-qcc304x调试笔记

qcc514x-qcc304x调试笔记-1-QCC514x系列 qcc514x-qcc304x调试笔记-2-开发环境搭建 qcc514x-qcc304x调试笔记-3-如何修改蓝牙名称 qcc514x-qcc304x调试笔记-4-如何修改蓝牙地址 qcc514x-qcc304x调试笔记-5-如何区分左右耳 qcc514x-qcc304x调试笔记-6-PIO相关操作 ...

leezs的博客 1244

Java对UTF-8格式文件的读取、写入及添加BOM头处理

_(:з」∠)_连我自己都觉得这个标题略长了……         事情的起因是这样的: 数据管理系统可以自动导出编码为UTF-8的csv格式文件,然而,距离在Windows上直接用Excel打开它却还有一步之遥:乱码。当欢欢喜喜地直接打开这个文件时,发现其中的汉字部分几乎都是???,这个对于含有汉字的文件肯定是不可接受的。

云雀的工作本 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

踩坑记录:UTF-8、UTF-8-BOM 与 GB2312 读取的乱码真相

1.乱码的核心永远是“编码和解码方式不匹配”,没有例外;2.UTF-8-BOM 不是用来解决乱码的,是用来标记编码的,其“能兼容 GB2312 读取”是 Windows 的特殊机制,不是编码本身兼容;3.现代开发中,优先使用 UTF-8(无BOM)编码,无论是脚本、配置文件、网页还是代码,都能保证跨平台兼容性;

kfru4f6Fr的博客 241

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Matlab读取中文是乱码的解决

本代码适合读取UTF-8 无BOM格式的文本,表现为:excle打开文本为乱码,但是用notebook+打开又能看到正确文字。 这种情况多是因为文本的编码为Linux系统生成,而用Windows的软件打开存在编码错误,从而形成乱码。 BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF...

LawNancy1999的博客 7249

UTF-8文本文件头部乱码“锘*”的成因与TaoToken辅助排查方法

文件头出现“锘*”乱码,根源是UTF-8 BOM(EF BB BF)被按GBK解码。本文给出xxd检测、Python批量去除BOM脚本与复现验证步骤,并说明如何用TaoToken辅助解读十六进制输出,官网见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_42348783的博客 117

UTF-8 with BOM 科普

UTF-8 with BOM 科普

zyckk4的博客 2500

在CSV文件读取时id读取之后成了‘锘縤d‘,该怎么修改

准备用python实现一个小想法,里边数据可能会有点多,也为了代码能成块展示,所以打算写一个读取文件的函数。此时考虑到python中可以直接将CSV格式文件读取成字典的形式,所以尝试了一下。但是中间出现了错误,第一行第一列中是后面数组的’id’号,每次在读取的时候出现’锘縤d’就是不按照自己预想的套路来出牌!想到应该是数据保存类型的问题。于是,我准备将他转换成博客中说的不带“BOM”的,但是我。可以看出我的第一行都是准备了字典的键值的,且都是合法的!所以我开始了我的尝试,来解决我自己的问题。

再来一下! 478

bom csv java_解决Java以UTF-8导出的CSV文件用Excel打开乱码

项目中导出或下载的CSV文件,默认打开方式一般都是Excel。若文件中有中文或者日文时,显示内容就会乱码,但是如果用文件编辑器记事本之类的打开显示内容是正常的。首先解释一下为什么会有这种现象,之后给出解决办法。乱码原因乱码的大多数原因是文件编码和工具打开文件使用的编码不统一导致。Excel打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为UTF-8、Unicode等编码可能就会出现文件...

weixin_39586649的博客 643

CSV中文乱码终结者:UTF-8 with BOM的实战解析

本文深入解析CSV文件在Excel中打开出现中文乱码的根本原因,即编码识别问题,并提供了终极解决方案:使用UTF-8 with BOM编码。文章详细阐述了BOM的原理、优缺点,并给出了在Python、Java等编程语言中以及通过记事本手动处理CSV文件乱码的实战方法,帮助开发者彻底解决这一常见痛点。

x2y3z4a5b的博客 670

Java读取UTF-8格式txt文件第一行出现乱码——问号“?”的解决方案

test.txt文件内容: A中 2国 3 4 5 6   test.txt文件采用写字板保存为UTF-8格式 保存并关闭后使用写字板再次打开该UTF-8文档,中文、字母正常显示   测试代码:   [java] view plaincopy import java.io.BufferedReader;   im

MaximusKiang的专栏 2349
上一篇: requests https访问错误SSLError: certificate verify failed 及InsecureRequestWarning处理办法
下一篇: 批处理bat 延时启动的方法
mighty13
博客等级 码龄23年 728粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值