字节笔记本

2026年2月22日

Make Me a Hanzi - 开源汉字数据与笔画动画项目

本文介绍 Make Me a Hanzi,一个免费开源的汉字数据项目,提供超过 9000 个常用简体和繁体汉字的字典数据和笔画顺序矢量图形。该项目是众多汉字学习应用和网站的数据基础,包括 Hanzi Writer、Inkstone 等知名工具。

项目简介

Make Me a Hanzi 是由 skishore 开发维护的开源项目,旨在为中文学习者提供高质量的汉字数据。截至目前,该项目在 GitHub 上已获得 2.4k+ stars563+ forks

该项目的数据来源于多个开放数据源,包括 Unicode Unihan 数据库、CJKlib 以及 Arphic Technology 提供的免费字体。项目采用双重许可证:字典数据采用更宽松的许可证,而图形数据采用 LGPL 许可证。

核心特性

  • 海量汉字数据:覆盖 9000+ 个常用简体和繁体汉字
  • 笔画顺序数据:提供每个汉字的标准笔画顺序 SVG 矢量图形
  • 动画支持:包含实验性的动画 SVG 文件,可展示汉字书写过程
  • 详细字典信息:包含拼音、释义、部首、字源等信息
  • IDS 分解:支持表意文字描述序列(Ideograph Description Sequence)分解
  • 免费开源:数据完全免费,可用于个人和商业项目

数据文件说明

项目数据分为两个主要文件:

dictionary.txt

包含字典信息,每条记录为 JSON 格式:

字段说明
characterUnicode 字符(必需)
definition面向第二语言学习者的释义(可选)
pinyin逗号分隔的拼音列表(必需)
decompositionIDS 字符分解(必需)
etymology字源信息,包含 type、hint、phonetic、semantic 等字段(可选)
radical部首(必需)
matches笔画与部件的映射关系(可选)

graphics.txt

包含图形数据,每条记录为 JSON 格式:

字段说明
characterUnicode 字符(必需)
strokesSVG 路径数据列表,按正确笔画顺序排列
medians笔画中线数据,可用于生成笔画顺序动画

坐标系统说明:

  • 画布大小:1024×1024
  • 左上角坐标:(0, 900)
  • 右下角坐标:(1024, -124)
  • 注意:Y 轴向下递减(与常规坐标系相反)

使用示例

基础 SVG 渲染

html
<svg viewBox="0 0 1024 1024">
  <g transform="scale(1, -1) translate(0, -900)">
    <path d="STROKE[0] DATA GOES HERE"></path>
    <path d="STROKE[1] DATA GOES HERE"></path>
    ...
  </g>
</svg>

嵌入动画 SVG

项目提供实验性的动画 SVG 文件(位于 svgs/ 目录),可通过 Unicode 码点查找对应文件:

javascript
// 获取字符的 Unicode 码点
const codepoint = '字'.charCodeAt(0); // 23383
html
<body>
  <embed src="23383.svg" width="200px" height="200px"/>
</body>

Node.js 读取数据

javascript
const fs = require('fs');

// 读取字典数据
const dictionary = fs.readFileSync('dictionary.txt', 'utf8')
  .split('\n')
  .filter(line => line.trim())
  .map(line => JSON.parse(line));

// 读取图形数据
const graphics = fs.readFileSync('graphics.txt', 'utf8')
  .split('\n')
  .filter(line => line.trim())
  .map(line => JSON.parse(line));

// 查找特定字符
const charData = dictionary.find(d => d.character === '汉');
const charGraphics = graphics.find(g => g.character === '汉');

console.log(charData);
// {
//   character: '汉',
//   definition: 'the Han Chinese people, Chinese language',
//   pinyin: 'hàn',
//   decomposition: '⿰氵又',
//   radical: '氵',
//   ...
// }

数据来源与许可

dictionary.txt

  • 来源:Unicode Unihan 数据库、CJKlib
  • 许可证:较宽松的开源许可

graphics.txt 和 svgs.tar.gz

  • 来源:Arphic PL KaitiM GB 和 Arphic PL UKai 字体
  • 许可证:LGPL

特别感谢 Arphic Technology(文鼎科技)在 1999 年以宽松许可证发布其字体作品,使本项目成为可能。

相关项目

Make Me a Hanzi 的数据被广泛应用于以下项目:

项目说明链接
Hanzi WriterJavaScript 汉字动画和练习库GitHub
Inkstone中文书写练习应用官网
Zydeo免费开源中文词典官网
HanDeDict中德词典GitHub
Hanping Chinese DictionaryAndroid 中文词典应用Google Play

替代资源

如需其他地区的笔画顺序数据,可参考:

  • animCJK:提供日本笔画顺序数据 (GitHub)
  • KanjiVG:日本笔画顺序数据,不基于 Arphic 字体 (官网)

在线演示

在演示站中,你可以通过手写输入查找汉字,查看笔画顺序动画。

项目链接

分享: