全角半角在线转换
把 ABC123 这类全角字符压成半角 ABC123,或把半角内容撑成全角。从 PDF、Word 复制出来的数字与字母常夹着全角字符,粘进表单会提示格式不对,用这个工具就能修。中文专属标点(。、、“”)不在全角 ASCII 区块内,会原样保留。
全角与半角是中文输入法留下的常见问题:从 PDF、Word 或某些后台编辑器复制出来的数字与字母常带全角形态(ABC123),粘进表单会被判成格式错误,手机号、身份证号、订单号最容易踩。这个工具把全角 ASCII 压回半角,或反向把半角撑成全角,用于排版对齐。
规则只有两条:全角 ASCII(U+FF01~FF5E)与半角 ASCII(U+0021~7E)逐个相差 0xFEE0,全角空格(U+3000)对应半角空格。因此中文专属标点(句号、顿号、中文引号)不在转换范围内会原样保留;转完看到逗号、括号变了形是正常现象,而句号没变说明它本来就是中文标点。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 选择方向:全角转半角(表单报错时用)或半角转全角(排版对齐时用)。
- 粘贴内容,结果即时更新,下方统计会显示改了多少字符、多少未变。
- 核对统计:若改动数为 0,说明文本里本来就没有全角 ASCII 字符。
- 复制结果贴回表单后重新校验一次,确认格式通过。
计算原理与示例
基本用法
选好方向后把内容粘进输入框,结果即时更新,下方的统计会告诉你这次改了多少个字符、有多少字符没动。复制按钮拿到的是转换后的完整文本,可以直接贴回表单或文档。
全角与半角的换算规则
规则只有两条:全角 ASCII(U+FF01~FF5E)与半角 ASCII(U+0021~7E)逐个相差 0xFEE0,全角空格 U+3000 对应半角空格 U+0020。所以「全角转半角」会把 ,!?:;()这些落在全角区块内的标点一起压成半角,而 。、、“”《》【】这些中文专属标点不在区块内,不会被改动。
和「中英标点转换」的分工
两个工具解决的问题不同:本工具管「字符宽度」(全角字母数字与全角空格),标点工具管「中英标点习惯」(。→. 、,→, 含区块外的中文标点)。只改宽度、不动中文标点,用本工具;想把整段中文标点改成英文风格,用标点工具。
口径:全角 ASCII(U+FF01~U+FF5E)与半角 ASCII(U+0021~U+007E)按差值 0xFEE0 双向换算;全角空格 U+3000 与半角空格 U+0020 互相转换。汉字、假名、以及不在全角 ASCII 区块内的中文标点(。、、“”《》【】——……)一律原样保留。
代码示例
JavaScript 半角与全角互转
// 全角 → 半角
const toHalf = (s) => s
.replace(/[\uFF01-\uFF5E]/g, (c) => String.fromCharCode(c.charCodeAt(0) - 0xFEE0))
.replace(/\u3000/g, ' ');
// 半角 → 全角
const toFull = (s) => s
.replace(/[\u0021-\u007E]/g, (c) => String.fromCharCode(c.charCodeAt(0) + 0xFEE0))
.replace(/ /g, '\u3000');
toHalf('ABC123'); // 'ABC123'
toFull('ABC123'); // 'ABC123'
Shell 清理表单里粘来的全角字符
# 先找出文件里所有全角字母数字(确认影响范围)
grep -nP "[\x{FF01}-\x{FF5E}]" data.txt | head
# 用 Python 批量转换(无需手算码位偏移)
python3 - <<'PY' > fixed.txt
s = open('data.txt', encoding='utf-8').read()
print(''.join(chr(ord(c) - 0xFEE0) if 0xFF01 <= ord(c) <= 0xFF5E else c for c in s), end='')
PY
常见问题
全角和半角到底是什么区别?
同一种字符在字库里占的宽度不同:半角占 1 个单位(如 ABC、123),全角占 2 个单位(如 ABC、123),所以在等宽字体下全角看起来「胖一倍」。中文输入法在中文状态下打出的标点、从 PDF 复制出的数字往往都是全角。
为什么全角转半角后逗号也变成了半角?
因为全角逗号(,=U+FF0C)正好落在全角 ASCII 区块 U+FF01~FF5E 内,宽度转换会一并处理它。这是「宽度归一」的必然结果,也和大多数工具的行为一致。若你只想改字母数字、保留中文标点风格,可以转换后手工替换,或改用「中英标点转换」工具单独处理标点。
转换后句号还是全角,是不是没生效?
这是正常现象。中文句号「。」是 U+3002,不在全角 ASCII 区块内,也没有对应的半角宽度概念,所以宽度转换不会动它。真正会被转的是 ,!?:;()这些 U+FF01~FF5E 内的标点,以及全角空格。
半角转全角时普通空格也会变吗?
会。半角空格(U+0020)对应全角空格(U+3000),「全角化」的通行做法就是一起转。如果你只想要字符变全角、空格保持半角,可以先转换再用编辑器把全角空格替换回普通空格——转换结果里两者的显示差异很明显。
手机号或身份证号粘进表单提示格式错误怎么办?
多半就是全角数字在作怪:表单用正则校验 ^\d+$ 这类规则时,全角「123」不属于数字字符,必然不匹配。把内容贴进来选「全角 → 半角」,再把结果贴回表单即可;顺带注意首尾是否夹带了全角空格。
汉字会不会被转换?
不会。汉字本身就占两个宽度单位,没有「半角形态」,所以不在转换范围内。假名、韩文、各种符号(如 ℃、©)同样保持原样——本工具只处理全角 ASCII 区块与全角空格。
全角空格为什么看起来很宽,还会导致校验失败?
全角空格(U+3000)在等宽字体下占两个字符宽,肉眼像缩进;但它不是普通空格,许多校验规则(如 trim 或 ^\s*$ 之外的精确匹配、URL 参数、JSON 键)都会因此出错。用「全角 → 半角」转一下就能看出哪里藏了它,统计里的「转换字符数」也能帮你确认。
转换会在服务器上留下我的文本吗?
不会。转换在浏览器内完成,输入既不上传也不写入 localStorage;本工具没有历史记录区块,处理合同、名单一类内容也不必担心留痕。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。