一款新型火星文生成器 —— 多候选随机 + 拆字表达 + 装饰符号 + 可反向还原。 纯前端 / 零后端 / 离线可用 / 双击即开 / 一键部署到 Vercel。
🌐 在线试用:https://marss-nine.vercel.app/
| 特性 | 说明 |
|---|---|
| 🎲 多候选随机映射 | 每字多个火星文变体(异体 / 形近 / 同音 / 生僻 / 拼音),加权随机抽取,同输入每次结果都不同 |
| 🧩 拆字表达 | 如「你 → 亻尔」、「时 → 日寸」,按概率触发;偏好左右结构(易读),上下/包围结构 0.4 折扣概率 |
| ✨ 装饰符号系统 | 130+ 符号,包含 ASCII 框线 / 希腊字母 / 西里尔 / 日语假名 / 复杂前缀;3 种插入位置模式 |
| 🔄 反向还原 | 火星文 → 简体,自动剥离装饰,近似还原(有损,多对一映射) |
| 🚀 零依赖 | 纯 vanilla JS,无构建步骤,引擎函数可移植到小程序 |
| 🎨 现代 UI | 简约白底圆角卡片设计,响应式布局,移动端友好 |
访问部署后的 URL(详见 部署)。
直接双击 index.html 即可在浏览器打开使用,无需任何服务器。
# 进入项目目录
cd 火星文翻译器
# Python 3
python -m http.server 8000
# 访问 http://localhost:8000
# 或 Node.js
npx http-server -p 8000Ctrl + Enter— 快速转换
- 在左侧输入简体文本(已预填示例)
- 调节顶部参数(风格预设 / 拆字概率 / 装饰密度 / 拼音混排)
- 点击 "转换" → 右侧输出火星文
- 点击 "再随一次" → 用相同输入生成不同结果
- 点击 "⇅ 互换" → 输入输出互换,并自动切换"反向模式"
- 反向模式(
火星文 → 简体):自动剥离装饰,近似还原
| 预设 | 拆字 | 装饰 | 拼音 | 适用场景 |
|---|---|---|---|---|
| 重度火星文 | 25% | 30% | ✅ | 最大化火星文效果 |
| 纯净模式 | 0 | 0 | ❌ | 仅做字库映射,无修饰 |
- 拆字概率:0~100%,控制按"结构部件"拆字的频率
- 装饰密度:0~100%,控制符号插入的概率
- 拼音混排:✅ 启用会包含 χιǎηɡ、ɡuò、ьù、日语假名等混合形式
- HTML + CSS + 原生 JS(无任何框架、无外部依赖)
- 单页面应用:所有样式、脚本、引擎内嵌于
index.html - 引擎分离:字库 / 装饰 / 预设外置到
data/dictionary.js - DOM 解耦:核心引擎
toMars / fromMars为纯函数,可在 Node.js 单元测试
火星文翻译器/
├─ index.html # UI + 引擎(已精简,仅 ~10KB)
├─ data/
│ └─ dictionary.js # 字库 / 装饰 / 预设(外置,便于贡献)
├─ vercel.json # Vercel 部署配置
├─ .gitignore
├─ README.md # 本文件
└─ CLAUDE.md # 给 Claude Code 的项目上下文(开发用)
// 字库:原字 → 变体 / 拆字
CHAR_LIB["我"] = {
v: ["莪","涐","峨","硪","皒","ωǒ"], // 通用候选,加权随机
s: ["亻","戈"], // 左右结构(满概率拆字)
s2: ["丿","扌","戈"] // 上下/包围结构(0.4×折扣概率,可选)
};
// 装饰:风格 → 位置 → 符号列表
DECOR["heavy"] = {
lead: ["┌","◣","Φ","Д","...︻◣_"], // 句首前缀
mid: ["の","の","τ","ηι","..."], // 字间垫字
tail: ["〓","◥","﹏",...]
};
// 预设:风格组合
PRESETS["重度火星文"] = {
style: "heavy", // 装饰风格名
splitRate: 0.25, // 拆字概率 0~1
decorDensity: 0.30, // 装饰密度 0~1
decorMode: "random", // 'random'|'sym'|'onlymid'|'classic'
pinyin: true // 是否混合拉丁/希腊/西里尔/假名
};- 新增字符 —— 在
CHAR_LIB中按分类(人称 / 助词 / 动词 / 情感 / 自然 …)添加 - 变体来源优先级:异体字 > 形近字 > 同音字 > 生僻字 > 拼音形式
- 首位变体 应为真实语料中出现频率最高的形式(决定"王者变体"加权)
- 拆字部件 须能拆为 2~3 个常见部件;左右结构填
s,上下/包围填s2 - 提交 PR 时附带该字 3~5 条真实语料引用(标源出处)
# 1. 在 https://github.com/settings/tokens 撤销对话中可能泄漏的 token,新建一个(public_repo 权限即可)
# 2. 在项目目录里:
export GH_TOKEN=ghp_你的新token
./deploy.sh脚本会自动:创建 GitHub 仓库 RizenYoung/marss → 提交代码 → 推送。
脚本会告诉你最后两步手动操作(Vercel 网页端关联 + Deploy)。
# 你拿到 GitHub token 后,本机:
export GH_TOKEN=ghp_你的token
cd /d "f:\火星文翻译器"
git remote add origin "https://x-access-token:${GH_TOKEN}@github.com/RizenYoung/marss.git"
git push -u origin master推送前可先到 GitHub 上点 New repository → 名称填 marss → Public → 先别勾任何初始化选项。
- vercel.com/new → 用 GitHub 登录
- Import
RizenYoung/marss仓库 - Framework Preset 选 "Other"(Vercel 会自动识别为静态站点)
- 点 Deploy —— 1 分钟后拿到 URL
- 关联项目到 Vercel 后,在 Vercel 项目 Settings 找 Project ID 和 Org ID
- https://vercel.com/account/tokens 创建 token(命名
marss-deploy) - GitHub 仓库 → Settings → Secrets and variables → Actions
- 添加
VERCEL_TOKEN/VERCEL_PROJECT_ID/VERCEL_ORG_ID三个 Repository secrets
- 添加
- 此后
git push即自动部署
.github/workflows/deploy.yml 已自动随仓库发布,无需额外配置。
-
index.html在仓库根目录(Vercel 自动识别) -
data/dictionary.js与index.html同级 -
assets/effects.css/js也能被访问到(HTML 中是相对路径) -
vercel.json中的缓存策略生效(data 24h / assets 7d) - 移动端浏览器测试:Chrome Safari Edge 均正常
Vercel 项目 → Settings → Domains → 添加你的域名,按提示配置 DNS 即可。
-
index.html可直接打开(无构建步骤) -
data/dictionary.js与index.html同级(相对路径) -
vercel.json中的缓存策略生效(字库 24h 缓存) - 移动端浏览器测试:Chrome Safari Edge 均正常
node -e "
const fs=require('fs'),vm=require('vm');
// 加载字库 + 引擎
const dict=fs.readFileSync('data/dictionary.js','utf8');
const html=fs.readFileSync('index.html','utf8');
const engine=html.match(/<script>([\s\S]*?)<\/script>\s*<\/body>/)[1];
const sb={module:{exports:{}},console};
sb.window={};
vm.createContext(sb);
vm.runInContext(dict+'\n'+engine, sb);
const {toMars,fromMars}=sb.module.exports;
// 测试用例
console.log('=== 重度火星文 ===');
console.log(toMars('我爱你',{style:'heavy',splitRate:0.25,decorDensity:0.30,pinyin:true}));
console.log('\n=== 纯净模式(关拼音)===');
console.log(toMars('我爱你',{style:'pure',splitRate:0,decorDensity:0,pinyin:false}));
console.log('\n=== 反向还原 ===');
const result=toMars('我爱你',{style:'heavy',splitRate:0.1,decorDensity:0.1,pinyin:false});
console.log('火星文:', result);
console.log('还原: ', fromMars(result));
"- Step 1(已完成):单文件核心 + 种子字库 + UI + 反向转换
- Step 1.5(已完成):基于语料库"王者变体"优化 + 拼音混排开关 + 颜文字移除
- Step 2(已完成):UI 美化(简约现代风) + 字库外置 + 部署文档
- Step 3(后续):微信小程序,复用
toMars / fromMars引擎(直接复制index.html中的内嵌脚本) - Step 4(远期):扩充字库至 3500 字(基于成语词典 / 现代汉语常用字表)
本站是字符变形工具,不是 AI 生成工具:
- 🚫 不连接任何 AI 接口、不调用云服务
- 🚫 不收集、不存储、不上传用户输入
- ✅ 所有变换在浏览器本地完成(点击「转换」后立刻返回结果,网络请求 = 0)
与 Emoji、Unicode 字体、字符画工具一样是"被动工具"。法律责任层面:
- 用户输入什么是用户责任
- 工具做什么只是字符替换,类似输入法
微信对所有"未 ICP 备案 + 陌生域名"网页会显示红色提示,非针对本站。
要在微信内正常打开(无拦截提示),两条路径:
- 做微信小程序 — 复用本仓库
index.html中的纯函数引擎(toMars / fromMars) - ICP 备案 — 需要大陆服务器 + 备案域名 + 7-20 天审核,个人主体仅可非营利
折中方案:把 URL 用文件传输助手发给自己 / 用浏览器打开后分享给好友,都能正常使用。
- 字库覆盖 ~240 字,主要为常用字;冷僻字会原样保留。扩充至 3500 字是数据任务,非架构任务。
- 反向有损:火星文 → 简体是 first-wins 还原,碰撞时优先高频字。例如 "他的她" 中 "祂" 只能还原为其中一个。
- 装饰仅在 CJK token 间插入:标点 / 拉丁 / 数字之间不插入。
の是火星文核心符号,不属于拼音混排:即使关闭"拼音混排",の仍会出现(替代"的")。
MIT License — 自由使用、修改、分发,欢迎 PR。
- 字符变体数据来自网络公开语料(含
更多语料.txt、参考语录.txt) - 设计灵感:QQ 火星文、贴吧火星文、B 站抽象话体系
- UI 风格参考:Notion / 飞书 / Linear
💬 遇到问题?