跳至主要內容

记录一次IDEA非法字符报错

Leo报错及Bug报错及Bug约 549 字大约 2 分钟

UTF8 与 UTF8-BOM,大端与小端等编码到底有何不同

1. 问题发现

最近在运行一个开源项目的时候,后端SpringBoot工程运行时,报了一个错,截图如下

image-20230908135357992
image-20230908135357992

BOM

出于好奇,我们查一下这个编码\\ufeff是个什么东东,查询得知,这是一个标识字节存储顺序的编码。

这个涉及到一个名词:BOM

BOM:Byte Order Mark, 中文名译作“字节顺序标记”。我们知道一个UNICODE编码中一个汉字大多数占用2个字节,那个这两个字节哪个存储在存储地址高位,哪个存储在低位呢?

Unicode编码中,FEFF表明字节流是Big-Endian(大端序,内存低地址存放高位数据),FFFE则表明字节流是Little- Endian(小端序,内存的低地址存放低位数据)。

(可以巧妙区分为:内存低地址存的是低位就是小端序,内存低地址存的是高位就是大端序)

如“0x11223344”,这个变量的高字节是”0x11“,最低字节是为”0x44“,大端存储时为:

内存地址数据
0x00100x11低内存地址,高位数据
0x00110x22
0x00120x33
0x00130x44高内存地址

而小端时数据的顺序则是相反的:

内存地址数据
0x00100x44低内存地址,低位数据
0x00110x33
0x00120x22
0x00130x11高内存地址

2. 思路

解决的思路是将文件编码格式由其他编码格式转为 UTF-8格式。

3. 解决方式

3.1 方式一

选择一个其他编码,如GBK。(我选的是GBK)。如下图

image.png
image.png

第二步:重复步骤一,再将编码选择回来,即第二次选择UTF-8编码。

第三步:嗯,没有第三步,这时候问题应该已经解决了。

3.2 方式二

使用编辑器软件/IDE(windows记事本程序除外)将文件内容复制一份重新保存,并删除旧文件。

公众号封面
公众号封面