.mcfunction与UTF-8 with BOM
前几天在玩winPE的时候不小心点到了磁盘备份,结果就把整个C盘给备份到了机械盘。备份的时间非常的长,在等待的时候我决定用记事本写mc的函数文件。然后二十分钟的时间我成功写了三行(什
等回到主系统后,我继续将数据包写完了。然后测试的时候,发现日志文件读取函数报错。诶,不对啊,vscode里面DHP没有报错呀。我仔细检查,发现两个报错都是说我第一行的第一个位置报错(无法识别的命令或者不完整的命令)。然后顺着日志我找到了报错的两个函数,发现第一个函数对应的位置是一个schedule
命令,第二个甚至只是一行注释。
这个时候我突然想到,会不会是格式出了问题。果然,这两个报错的函数的编码格式是UTF-8 with BOM而不是UTF-8。当我将其更改为UTF-8编码格式之后,就不再报错了。
之后我去查找资料——
bom是为utf-16和utf-32准备的,用于标记字节顺序。微软在utf-8中使用bom是因为这样可以把UTF-8和ASCII等编码区分开来,但这样的文件在windows之外的操作系统里会带来问题。
UTF-8 with BOM文件的开头会多出三个字节,即BOM头。由记事本打开并保存的utf-8文本都会被自动加上这个BOM头,而mc似乎是读取不出这个头的,因此就把这个BOM头当作命令的一部分读取了,然后报错说在第一行的第一的位置发现了一个语法错误(实际上是BOM头)