文本处理 本地计算 开箱即用 内置示例 不留痕迹

全角半角在线转换

把 ABC123 这类全角字符压成半角 ABC123,或把半角内容撑成全角。从 PDF、Word 复制出来的数字与字母常夹着全角字符,粘进表单会提示格式不对,用这个工具就能修。中文专属标点(。、、“”)不在全角 ASCII 区块内,会原样保留。

全角与半角是中文输入法留下的常见问题:从 PDF、Word 或某些后台编辑器复制出来的数字与字母常带全角形态(ABC123),粘进表单会被判成格式错误,手机号、身份证号、订单号最容易踩。这个工具把全角 ASCII 压回半角,或反向把半角撑成全角,用于排版对齐。

规则只有两条:全角 ASCII(U+FF01~FF5E)与半角 ASCII(U+0021~7E)逐个相差 0xFEE0,全角空格(U+3000)对应半角空格。因此中文专属标点(句号、顿号、中文引号)不在转换范围内会原样保留;转完看到逗号、括号变了形是正常现象,而句号没变说明它本来就是中文标点。

使用步骤

  1. 选择方向:全角转半角(表单报错时用)或半角转全角(排版对齐时用)。
  2. 粘贴内容,结果即时更新,下方统计会显示改了多少字符、多少未变。
  3. 核对统计:若改动数为 0,说明文本里本来就没有全角 ASCII 字符。
  4. 复制结果贴回表单后重新校验一次,确认格式通过。

计算原理与示例

基本用法

选好方向后把内容粘进输入框,结果即时更新,下方的统计会告诉你这次改了多少个字符、有多少字符没动。复制按钮拿到的是转换后的完整文本,可以直接贴回表单或文档。

全角与半角的换算规则

规则只有两条:全角 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;本工具没有历史记录区块,处理合同、名单一类内容也不必担心留痕。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。