rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 是国际象棋对局的标准初始局面,用一行每个引擎、分析工具和战术题数据库都能理解的文本记录。这行文本就是 FEN(Forsyth-Edwards Notation,福赛思-爱德华兹记号法)。PGN 从头到尾一步一步记录整盘棋,而 FEN 则捕捉某一特定瞬间的单一局面,将重新开始对局所需的全部信息浓缩在六个由空格分隔的字段中。
FEN 最早由苏格兰报纸记者戴维·福赛思(David Forsyth)在 19 世纪发明,后来由史蒂文·J·爱德华兹(Steven J. Edwards)在 1994 年的可移植对局记号法(PGN)规范中改造并引入计算机国际象棋,如今已成为分享棋盘局面的通用标准。很多时候不必手打:棋盘图片转 FEN 介绍了怎样直接从截图、棋图或棋盘照片读出这串字符。
FEN 字符串的六个字段
一个 FEN 字符串恰好包含由单个空格分隔的六个字段。每个字段回答一个关于局面的具体问题:棋子位置、轮到谁走棋、易位资格、吃过路兵可用性以及回合计数时钟。
如果你想在阅读时检查或测试字符串,可以将任意 FEN 粘贴到免费的棋盘编辑器中,在浏览器中直观地查看和调整局面。
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
从左到右阅读,以下是各个字段的具体含义:
| # | 字段 | 初始示例 | 描述内容 | 标准格式 |
|---|---|---|---|---|
| 1 | 棋子摆放 | rnbqkbnr/.../RNBQKBNR | 从第 8 横线到第 1 横线逐格记录的棋子布局 | 用 / 分隔的 8 个横线段 |
| 2 | 走棋方 | w | 轮到谁走棋 | w(白方)或 b(黑方) |
| 3 | 易位权 | KQkq | 哪些易位权利仍有效 | K、Q、k、q,无则为 - |
| 4 | 吃过路兵目标格 | - | 刚刚前进两格的兵后方的目标格 | 代数记谱格子(例如 e3)或 - |
| 5 | 半回合计数 | 0 | 自上一次走兵或吃子以来的半回合数(plies) | 非负整数(达到 100 可主张和棋) |
| 6 | 回合数 | 1 | 对局的总回合计数 | 从 1 开始的正整数 |
1. 棋子摆放
这是最长也是最重要的字段。它按横线逐行描述棋盘上的 64 个格子,从第 8 横线(黑方底线)开始,逐行向下直到第 1 横线(白方底线),相邻横线之间用正斜杠(/)分隔。
棋子使用标准的单字母英文缩写来表示:
- 大写字母 = 白方棋子:
K(王)、Q(后)、R(车)、B(象)、N(马)、P(兵)。 - 小写字母 = 黑方棋子:
k(王)、q(后)、r(车)、b(象)、n(马)、p(兵)。
连续的空格子会被压缩为从 1 到 8 的数字。例如,8 表示一整行全空的横线,而 4P3 则表示四个空格子、一个白兵和三个空格子。每一段横线的格子数总和必须恰好为八。
在初始局面中,第 8 横线是 rnbqkbnr,第 7 横线是 pppppppp,第 6 到第 3 横线各自为 8,第 2 横线是 PPPPPPPP,第 1 横线是 RNBQKBNR。
2. 走棋方
单个字母表示轮到哪一方走棋:w 代表白方,b 代表黑方。由于国际象棋引擎是根据下一步轮到谁走来评估威胁和计算候选着法的,因此同样的棋子摆法,走棋方不同,本质上就是完全不同的局面。
3. 易位权
该字段指明双方在规则上依然保有的王车易位权利:
K:白方可王翼易位(短易位)Q:白方可后翼易位(长易位)k:黑方可王翼易位q:黑方可后翼易位
KQkq 表示全部四项权利均完好无损。如果王或车移动过,或者车在原始格子上被吃,相应的字母就会被移除。当双方均不再享有任何易位权利时,该字段记为单个连字符:-。
4. 吃过路兵目标格
根据 PGN 规范第 16.1.3.4 节的规定,只要上一步着法是兵前进两格,就会记录吃过路兵的目标格,标明该兵越过的那个格子。
至关重要的一点是,无论对方是否有兵能够执行吃过路兵,该目标格都会被记录。例如,白方开局走出 1.e4 之后,e 兵前进两格越过了 e3。即使黑方在 d4 或 f4 上没有可以吃过路兵的兵,第 4 字段也会变成 e3。如果上一步着法不是兵前进两格,此字段则设为 -。
5. 半回合计数
该字段用于计算自上一次兵前进或吃子以来的半回合数(任何一方单独走的一步/ply)。它的存在是为了执行 50 回合规则:如果半回合计数达到 100(即连续 50 个完整回合内没有吃子也没有走兵),任何一方均可主张和棋。只要有兵走动或任何棋子被吃,计数器就会重置为 0。
6. 回合数
回合计数器从 1 开始,并在黑方完成一步后立即加 1。例如,白方走出第 1 步,黑方应对第 1 步,计数器便递增为 2,供白方走第 2 步。
第二个例子:1.e4 之后的局面
观察 FEN 字符串在开局第一步之后如何更新,可以清晰地看出各个字段是如何协同工作的。以下是白方走出 1.e4 后的即时局面:
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
注意与初始 FEN 相比的具体变化:
- 棋子摆放:第 4 横线从
8变为4P3(前进的 e 兵两侧是空格),白方兵所在的横线从PPPPPPPP变为PPPP1PPP,因为 e2 格腾空了。 - 走棋方:从
w变为b,因为轮到黑方走棋。 - 易位权:依然是
KQkq,因为王和车都没有动过。 - 吃过路兵目标格:从
-变为e3,即兵在前进两格时越过的格子。 - 半回合计数:保持为
0,因为走兵会重置该计数器。 - 回合数:仍为
1,因为黑方尚未完成第 1 回合。
怎样判断 FEN 是将死还是逼和
FEN 字符串本身从不包含针对“将军”(check)、“将死”(checkmate)或“逼和”(stalemate)的显式标签。对局状态完全由棋子几何分布和走棋方推导得出。
若要从 FEN 字符串判断一个局面是将死还是逼和:
- 确定防守方的王:读取第 2 字段中的走棋方。若是
w,找到白王(K);若是b,找到黑王(k)。 - 判断王是否受到攻击:检查是否有任何敌方棋子攻击防守方王所在的格子。如果没有对方棋子攻击王,该局面就不可能是将死。
- 检查是否有合法应对着法:如果王受到攻击,判断防守方是否有任何合法着法可以化解:
- 将王移动到未受攻击的格子。
- 吃掉进行将军的棋子。
- 沿攻击线路用己方棋子垫将(面对马的攻击或贴身将军时无法垫将)。
- 如果王被将军且走棋方没有任何合法着法,则该局面为将死。
- 如果王未被将军且走棋方没有任何合法着法,则该局面为逼和(和棋)。
这是国际象棋中最快的将死——“愚人杀”(Fool's Mate),走完 1.f3 e5 2.g4 Qh4# 之后的局面:
rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 1 3
在此 FEN 中:
- 走棋方为
w,关注焦点是 e1 上的白王。 - h4 上的黑后沿着穿过 g3 和 f2 的开放斜线攻击 e1。
- 白王没有可逃跑的格子:d1、d2、e2 和 f1 均被白方自己的棋子占据,而 f2 在黑后的控制之下。
- 白方没有任何棋子可以吃掉 h4 上的后,也没有任何棋子可以移动到 g3 或 f2 来垫将挡住将军。
- 白方在被将军的状态下没有任何合法着法,确认已被将死。
光靠肉眼验证复杂局面很容易出错。免费的棋盘编辑器可以在浏览器中解析 FEN 字符串,确认局面是否可下,并自动标记将军、将死和逼和状态。
常见的非法 FEN 错误与引擎报错拒绝
将 FEN 导入 Stockfish 等引擎或分析界面时,无效的字符串会导致报错或被拒绝。最常见的非法 FEN 问题包括:
| 错误类型 | 出错原因 | 示例症状 | 引擎拒绝的原因 |
|---|---|---|---|
| 横线数量不匹配 | 缺少或多出 / 分隔符 | rnbqkbnr/pppppppp/8/8/8/PPPPPPPP/RNBQKBNR w ...(仅有 7 条横线) | 标准棋盘必须恰好包含 8 条横线。 |
| 格子总数不匹配 | 空格子计算错误或输入失误 | 单条横线上出现 4P4(总计 9 个格子) | 每条由 / 分隔的横线必须总计恰好 8 个格子。 |
| 兵出现在底线 | 兵被放置在第 1 或第 8 横线 | P7/8/8/8/8/8/8/8 w - - 0 1 | 兵不能出现在第 1 或第 8 横线;到达第 8 横线必须升变。 |
| 王数量无效 | 缺少王或存在重复的王 | 出现两个白王(K)或没有黑王(k) | 标准国际象棋要求每方必须且只能有一个王。 |
| 非走棋方的王处于被将军状态 | 不轮到走棋的一方其王暴露在攻击之下 | 走棋方为 w,但 e8 上的黑王正受到白方车的攻击 | 任何一方均不能走出让己方的王留在被将军状态的着法。 |
| 吃过路兵格子无效 | 吃过路兵目标格位于不可能的横线上 | 吃过路兵格子记为 e4 或 e5 | 吃过路兵目标格只能位于第 3 横线(白兵推进后)或第 6 横线(黑兵推进后)。 |
菲舍尔任意制(Chess960)变体:Shredder-FEN 与 X-FEN
在标准国际象棋中,王和车总是从固定的原始格子出发(白方为 e1、a1、h1;黑方为 e8、a8、h8)。四个易位权字符 KQkq 可以唯一标识王翼和后翼的易位权利。
在**菲舍尔任意制国际象棋(Chess960 / Fischer Random Chess)**中,底线棋子被随机打乱排布成 960 种初始布局之一。车可能从内侧竖线开始,或者两个车可能位于王的同一侧。由于标准的 KQkq 无法区分同一侧的多个车或非标准的竖线位置,因此有两种变体来处理易位:
- Shredder-FEN:用参与易位的车所在的实际竖线字母替换
K/Q和k/q(白方大写,黑方小写)。例如,如果白方的车从 c 线和 g 线开始且均保留易位权,易位字段就记为CGcg。 - X-FEN:只要易位的车不存在歧义(例如车分别位于王的两侧),就保留标准的
KQkq记号;若存在歧义,则将其替换为车起始位置所在的竖线字母。
现代国际象棋软件和引擎在支持标准 FEN 的同时也支持这两种变体,以确保菲舍尔任意制局面能够被准确加载。
FEN 与 PGN:何时使用哪种格式
FEN 和 PGN 都是标准的纯文本格式,但它们服务于不同的用途:
- FEN 是单帧快照。它记录某一确切的棋盘状态,不包含先前的走棋历史(除了半回合数和回合数计数)。它结构紧凑,仅占单行文本,是战术题设置、残局研究和引擎评估基准的标准格式。
- PGN(可移植对局记号法)则是整局编年史。它记录元数据标签(棋手、赛事、日期、结果),随后记录用代数记谱法书写的完整着法序列。
这两种格式相辅相成。当一盘棋从非标准局面开始时——例如战术题、让子棋或战术练习——PGN 文件会在其文件头中包含 [SetUp "1"] 和 [FEN "..."] 标签,以便软件在重放着法之前先摆好正确的棋盘局面。
FEN 在实际中的应用场景
因为 FEN 是通用的纯文本,它串联起了各大平台的国际象棋工具:

