跳到正文
    记谱法

    FEN 是什么?国际象棋局面记录法详解

    ScanChess

    14 分钟阅读

    本页目录9
    1. 1FEN 字符串的六个字段
    2. 2第二个例子:1.e4 之后的局面
    3. 3怎样判断 FEN 是将死还是逼和
    4. 4常见的非法 FEN 错误与引擎报错拒绝
    5. 5菲舍尔任意制(Chess960)变体:Shredder-FEN 与 X-FEN
    6. 6FEN 与 PGN:何时使用哪种格式
    7. 7FEN 在实际中的应用场景
    8. 8我们的实测观察
    9. 9生成、编辑与扫描 FEN 局面

    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 字符串判断一个局面是将死还是逼和:

    1. 确定防守方的王:读取第 2 字段中的走棋方。若是 w,找到白王(K);若是 b,找到黑王(k)。
    2. 判断王是否受到攻击:检查是否有任何敌方棋子攻击防守方王所在的格子。如果没有对方棋子攻击王,该局面就不可能是将死。
    3. 检查是否有合法应对着法:如果王受到攻击,判断防守方是否有任何合法着法可以化解:
      • 将王移动到未受攻击的格子。
      • 吃掉进行将军的棋子。
      • 沿攻击线路用己方棋子垫将(面对马的攻击或贴身将军时无法垫将)。
    • 如果王被将军且走棋方没有任何合法着法,则该局面为将死。
    • 如果王未被将军且走棋方没有任何合法着法,则该局面为逼和(和棋)。

    这是国际象棋中最快的将死——“愚人杀”(Fool's Mate),走完 1.f3 e5 2.g4 Qh4# 之后的局面:

    rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 1 3
    
    愚人杀:h4 上的黑后将死 e1 上的白王

    在此 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 无法区分同一侧的多个车或非标准的竖线位置,因此有两种变体来处理易位:

    1. Shredder-FEN:用参与易位的车所在的实际竖线字母替换 K/Q 和 k/q(白方大写,黑方小写)。例如,如果白方的车从 c 线和 g 线开始且均保留易位权,易位字段就记为 CGcg。
    2. X-FEN:只要易位的车不存在歧义(例如车分别位于王的两侧),就保留标准的 KQkq 记号;若存在歧义,则将其替换为车起始位置所在的竖线字母。

    现代国际象棋软件和引擎在支持标准 FEN 的同时也支持这两种变体,以确保菲舍尔任意制局面能够被准确加载。

    FEN 与 PGN:何时使用哪种格式

    FEN 和 PGN 都是标准的纯文本格式,但它们服务于不同的用途:

    • FEN 是单帧快照。它记录某一确切的棋盘状态,不包含先前的走棋历史(除了半回合数和回合数计数)。它结构紧凑,仅占单行文本,是战术题设置、残局研究和引擎评估基准的标准格式。
    • PGN(可移植对局记号法)则是整局编年史。它记录元数据标签(棋手、赛事、日期、结果),随后记录用代数记谱法书写的完整着法序列。

    这两种格式相辅相成。当一盘棋从非标准局面开始时——例如战术题、让子棋或战术练习——PGN 文件会在其文件头中包含 [SetUp "1"] 和 [FEN "..."] 标签,以便软件在重放着法之前先摆好正确的棋盘局面。

    FEN 在实际中的应用场景

    因为 FEN 是通用的纯文本,它串联起了各大平台的国际象棋工具:

    • 战术与排局习题:战术训练平台将习题存储为 FEN 局面,并附带预期的着法序列。
    • 引擎分析:桌面图形界面(GUI)、Lichess 和 Chess.com 允许你直接将 FEN 字符串粘贴到其分析板中,使用 Stockfish 评估特定局面。你也可以将任意 FEN 粘贴到对局分析中,在本地评估各种变化。
    • 棋盘图表与媒体素材:当你需要为文章、打印材料或分享生成高分辨率的棋盘局面图像时,只需将 FEN 传入 FEN 转图片即可轻松完成。
    • 教学与教练辅导:教练和棋手把 FEN 字符串粘贴到聊天室和学习群组中,无需打出长长的着法列表,就能分享特定的残局或开局难题。

    我们的实测

    我们的实测观察

    我们以 1858 年的“歌剧院对局”(保罗·摩菲对阵布伦瑞克公爵卡尔与伊苏阿尔伯爵)为例提供了三个演练实例,使用 python-chess 库进行了校验,并于 2026 年 9 月 30 日在 Lichess 和我们自己的验证器(未登录状态)上进行了测试:

    中局易位与回合时钟:12...Rd8 之后

    歌剧院对局在 12...Rd8 之后的棋盘图

    (此图是由已知 FEN 通过 python-chess 渲染生成的;我们并未运行棋盘识别。)

    3rkb1r/p2nqppp/5n2/1B2p1B1/4P3/1Q6/PPP2PPP/2KR3R w k - 3 13
    

    在此局面中:

    • 易位权(k):白方在第 12 回合进行了后翼易位(12.O-O-O),移除了白方的 K 和 Q 权利。黑方位于 a8 的车移动到了 d8(12...Rd8),移除了黑方的 q 权利。只有黑方的王翼易位 k 在规则上依然保留。
    • 半回合计数(3):白方的吃子 11.Bxb5+ 将半回合计数重置为 0。随后三步非吃子着法——11...Nbd7(1)、12.O-O-O(2)和 12...Rd8(3)——使计数器累进到 3。
    • 走棋方与回合数:轮到白方走棋(w),处于第 13 回合。

    Lichess 上的最终局面:17.Rd8# 之后

    当我们把整盘共 33 个半步(ply)的对局导入 Lichess 分析时,棋盘跳到了最后的将死局面,FEN 字段显示为:

    1n1Rkb1r/p4ppp/4q3/4p1B1/4P3/8/PPP2PPP/2K5 b k - 1 17
    

    这记录下了将死瞬间:黑方位于 e8 的王受到白方 d8 车的攻击,无处可逃,无法垫将,也无法吃掉该车。

    诊断问题对局:验证器的“停止时的局面”

    FEN 的一个关键实际作用是定位记录的着法是在哪里出错的。当我们在基于浏览器的 ScanChess PGN 验证器中测试一个故意误读的记谱单着法(将 7...Qe7 误读为 7...Qe1)时,该工具标记了这一非法着法,列出了包括 Qe7 在内的合法选项,并给出了确切的“停止时的局面”FEN:

    rn1qkb1r/ppp2ppp/5n2/4p3/2B1P3/1Q6/PPP2PPP/RNB1K2R b KQkq - 3 7
    

    你可以将该字符串粘贴到棋盘编辑器中,直接查看记谱出错时的确切局面,而无需手动摆出它前面的 13 步合法着法。(PGN 查看器的功能则相反:它会为加载对局的每一个局面显示一个可复制的 FEN。)

    在我们公开的测试中,扫描器在一张真实手写记谱单上 45 步中有 43 步一次读对(3 张标准代数记谱单合计 143 步中 141 步,其中 2 张是打印的测试单);空白记谱单上没有编造任何着法。

    查看测试的每一步

    生成、编辑与扫描 FEN 局面

    手动输入 FEN 字符串极易出错;一个字符错位或空格计数失误就会导致整个字符串失效。在实际操作中,棋手和教练依靠软件来生成和处理 FEN:

    • 可视化棋盘摆子:使用免费的棋盘编辑器拖动棋子摆放位置、切换走棋方、调整易位权,并即时复制经过验证的 FEN 字符串。
    • 数字化导出:任何数字化分析棋盘或国际象棋数据库都可以一键将当前棋盘局面导出为 FEN。
    • 扫描实体棋盘:在研究印刷国际象棋书籍、图表或比赛棋盘上的局面时,手动输入非常缓慢。使用 ScanChess 棋盘扫描(或从 ScanChess 主扫描器进入),你可以上传棋盘照片。模型会识别棋子,验证摆子是否合法,并直接返回 FEN 字符串(消耗 1 积分)。从那里,你可以在棋盘编辑器中打开该局面进行检查,或将其导出以供引擎分析。对于记录在纸上的完整实体对局,扫描手写记谱单会生成完整的 PGN 文件,你可以从中提取任意一步的确切 FEN。

    常见问题

    国际象棋的 FEN 字符串是什么?

    它是用一行六字段文本描述单一局面的格式,包含棋子、走棋方和规则所需的局面历史信息。

    FEN 和 PGN 有什么区别?

    FEN 保存一个局面;PGN 按着法顺序保存整盘对局,也可以用 FEN 指定非初始局面。

    可以在棋盘上编辑 FEN 吗?

    可以。把 FEN 粘贴到棋盘编辑器,移动棋子并设置走棋方和易位权,再复制更新后的字符串。

    本文用到的工具

    几秒内把你的记谱单变成 PGN

    上传一张照片,让 ScanChess 完成转录。

    开始扫描记谱单

    继续阅读