Project1

标题: 什么是BOM?? [打印本页]

作者: EngShun    时间: 2010-12-5 11:22
标题: 什么是BOM??
我在http://rpg.blue/thread-162396-1-1.html得到了我要的脚本,
但是有一个很像叫做BOM的问题,
由于不能一贴多问所以我发了一个新帖,
到底什么是BOM???
作者: 禾西    时间: 2010-12-5 11:30
http://baike.baidu.com/view/414935.htm
最後一段
作者: EngShun    时间: 2010-12-5 11:50
本帖最后由 EngShun 于 2010-12-5 11:51 编辑

回复 禾西 的帖子

那为什么只要是Scene的脚本就不能用txt读取??会发生Syntax Error
作者: 苏小脉    时间: 2010-12-5 12:51
回复 EngShun 的帖子

首先, UTF-8 的 BOM 是 0xEFBBBF,而 Ruby 1.8 在 UTF-8 解析模式下会将 7 位 ASCII 字符集之外的字符视为有效的标识符字元。其次,eval 执行脚本前会先进行词法分析,当词法分析器进行字元化时,由于首当其冲的就是在 7 位 ASCII 之外的 BOM 字符,词法分析器会认为这是一个标识符的开始。如果这时 BOM 后面跟着的恰好是一个有对应 `end' 的 Ruby 关键字,比如 `class',那么 `class' 加上 BOM 这个前缀就会成为一个普通的标识符。之后,在文法分析(词法分析后的第二个阶段)的时候,就会因为 class 从关键字变成了一个普通的标识符,导致 `end’ 没有匹配的 `class' 而报出语法错误。

所以以下的错误和你的是一致的:

  1. eval("\xEF\xBB\xBFclass Scene_Map; end")
复制代码
只要脚本(字符串、文件)开头是有相应 `end' 的关键字,都会出现发生这样的情况。

BOM 对 UTF-8 毫无作用,因为 UTF-8 只有一种端序(字节序)。每次都默认给 UTF-8 编码的文本添加上 BOM 的缺德事也只有微软的记事本程序能干得出来了;P
作者: goahead    时间: 2010-12-8 10:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 苏小脉    时间: 2010-12-8 11:28
回复 goahead 的帖子

只能自动识别 Unicode 编码家族的成员,实际应用的时候用处不大,由于在类 Unix 上会影响 Shebang 的解析,以及各种脚本语言解释器的不兼容,Unicode 标准不建议给 UTF-8 加上 BOM:sleepy:

Use of a BOM is neither required nor recommended for UTF-8, but may be encountered in contexts where UTF-8 data is converted from other encoding forms that use a BOM or where the BOM is used as a UTF-8 signature.
- "The Unicode Standard 5.0, Chapter 2:General Structure" (PDF). pp. 36

作者: yhcfsr    时间: 2015-9-13 14:36
天杀的,回答的太专业了,让我这专业挖坟师佩服得五体投地啊




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1