全角半角转换

全角↔半角/数字/字母/标点

412 次访问

全/半角 与 中/英文标点

代码 / URL / 文档清洗高频
输入
输出
输入
输出

输入文本,同屏看 4 种转换结果(一键检查中文输入法误打的全角字符 / 中文标点)

→ 全部半角 + 英文标点
用于代码 / URL / 文件名
→ 全部半角
仅宽度转换,标点不动
→ 中文标点
英文标点改中文(保留宽度)
→ 全部全角
用于纯中文排版

概念说明

· 全角字符:占两格宽(如 ),Unicode 范围 U+FF01 ~ U+FF5E;全角空格 U+3000

· 半角字符:占一格宽(A 1 ,),即标准 ASCII U+0021 ~ U+007E

· 常见问题:中文输入法默认全角 / 中文标点,写代码时容易混入;导致 SQL 报错、URL 失败、JSON 解析错误。统一转半角 + 英文标点是清洗关键

· 中英文标点对照, · . · ! · ? · : · ; · ()() · ""''"" ''

关于本工具

了解工具定位 · 使用场景 · 对比优势

将全角字母、数字、标点一键转换为半角,或反向操作。处理包含全角字符的文本、清理从网页或 PDF 复制来的混乱格式、统一代码中的标点符号,几秒完成。所有转换在浏览器内完成,文本不上传服务器。

使用场景

💻

代码格式修复

程序员从英文文档复制代码到中文 IDE 时,经常混入全角括号、冒号或空格,导致编译报错。本工具一键将全角标点、字母、数字转为半角,省去逐行排查语法错误的 5-10 分钟,尤其适合团队提交前批量检查代码文件。

📄

简历排版规范

求职者用 Word 或在线模板写简历时,中英文混排常出现全角英文逗号(,)或半角中文句号(.),HR 打开后格式错乱。本工具将整段文字统一为全角中文标点 + 半角英文数字,让简历在任意系统上显示一致,减少因排版问题被筛掉的风险。

📊

数据清洗预处理

数据分析师从网页或 PDF 复制表格到 Excel 时,数字和标点常被转成全角(如“100”或“,1”),导致公式计算报错或排序异常。本工具批量将全角数字、字母、逗号转为半角,30 秒完成原本需要手动替换 50 次的重复操作。

🌐

URL 参数校验

运营人员在 CMS 后台编辑链接时,不小心输入全角问号(?)或等号(=),导致生成的分享链接 404。本工具快速检查 URL 中的全角字符并替换为半角,避免链接失效带来的流量损失,尤其适合电商大促期间批量生成短链的场景。

📝

论文格式校对

研究生在 LaTeX 或 Word 中撰写论文时,引用参考文献的标点(如“.”“,”)可能混入全角,导致引用格式不符合期刊要求。本工具一键规范英文摘要和参考文献中的标点、数字、字母为半角,中文正文保留全角标点,省去逐条检查格式的 20 分钟。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(在线文本工具)传统方法(手动替换)
数据隐私纯浏览器处理,文本不上传服务器文本需上传至服务器处理完全本地,无数据外泄风险
处理速度毫秒级实时转换取决于网络延迟,通常 1-3 秒取决于文本长度,数分钟到数小时
离线可用支持,加载后完全离线运行不支持,必须联网支持,完全离线
大小限制无限制,浏览器内存决定通常有单次字符数限制(如 10 万字符)无限制,取决于人工耐力
批量处理支持,可一次性粘贴大段文本支持,但受限于上传大小不支持,需逐段手动操作
标点符号处理全角/半角标点智能转换通常仅转换字母数字,标点需单独设置需人工识别并逐个替换,易遗漏
操作复杂度一键点击,自动识别转换方向需选择转换模式(全→半/半→全)需使用查找替换功能或手动输入
学习成本零门槛,打开即用需了解网站功能布局需掌握文本编辑器的替换功能

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在输入框中粘贴或键入待转换的文本,支持中文、英文、数字与标点混合内容
  2. 点击「全→半」或「半→全」按钮选择转换方向,也可单独勾选数字/字母/标点类型
  3. 点击「转换」按钮,结果区即时显示转换后的文本,支持一键复制

输入输出示例8 个典型场景,覆盖常规、边界与易错

输入输出说明
Hello,World!Hello, World!典型场景:全角英文字母和标点转半角
12345678901234567890典型场景:全角数字转半角
,。!?【】()“”‘’;:,.!?[]()""'';:典型场景:全角中文标点转半角英文标点
Hello, World!Hello,World!边界 case:半角转全角,字母和标点全转换
  (首尾全角空格)  (首尾半角空格)边界 case:全角空格(U+3000)转半角空格(U+0020)
abc123!@#abc123!@#易错 case:全角混合字符(字母+数字+符号)一次转换
中文全角标点,应该保留。中文全角标点,应该保留。易错 case:中文文本中的全角标点(逗号句号)不转换
URL:https://example.comURL: https://example.com边界 case:全角 URL 转半角后可直接点击访问

常见错误对照8 个常踩的坑 · 错误 → 修复

1. 混淆全角空格与半角空格

错误
hello world
修复
hello world

全角空格(U+3000)在代码、URL、配置文件中会被视为非法字符,导致解析失败或意外换行。半角空格(U+0020)才是标准分隔符。

2. 全角数字导致计算错误

错误
123 + 456
修复
123 + 456

全角数字(U+FF10-U+FF19)在 JavaScript、Excel、Shell 中不被识别为数值,会直接报错或当作字符串拼接。转换后再运算。

3. 全角字母导致域名/邮箱失效

错误
test@example.com
修复
test@example.com

域名和邮箱地址只接受半角字母(a-z)和半角点(.)。全角字母(U+FF21-U+FF3A)会被 DNS 或 SMTP 拒绝,无法送达。

4. 全角标点破坏 JSON/XML 结构

错误
{"name": "张三,年龄:25"}
修复
{"name": "张三, 年龄: 25"}

全角逗号(,)和全角冒号(:)在 JSON/XML 中不是合法分隔符,会导致解析器抛出 SyntaxError。仅半角逗号、冒号、花括号有效。

5. URL 路径或参数中混入全角字符

错误
https://example.com/路径?参数=值
修复
https://example.com/%E8%B7%AF%E5%BE%84?%E5%8F%82%E6%95%B0=%E5%80%BC

URL 标准(RFC 3986)只允许 ASCII 字符。全角问号(?)、等号(=)会被浏览器或服务端当作非法字符,导致 400 Bad Request。必须使用百分号编码。

6. 全角括号导致正则匹配失败

错误
(123)
修复
(123)

正则表达式中的分组、捕获、字符集都依赖半角括号(()[]{})。全角括号(U+FF08/U+FF09)会被当作普通文本,无法实现分组/捕获逻辑。

7. 全角引号导致字符串字面量解析异常

错误
他说:“你好”
修复
他说: "你好"

全角双引号(“ ”)在大多数编程语言中不是字符串定界符,会导致字符串提前结束或语法错误。使用半角双引号(")或单引号(')包裹。

8. 全角减号/连字符导致日期或数值解析错误

错误
2023-01-01
修复
2023-01-01

全角减号(- U+FF0D)不是标准连字符(- U+002D),在 JavaScript Date.parse、Excel 日期格式、文件名排序中会被视为非法字符,导致解析失败。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

全角字符码位 = 半角字符码位 + 0xFEE0

变量说明

  • 全角字符码位 — 全角字符的 Unicode 码点(十进制)
  • 半角字符码位 — 半角字符的 Unicode 码点(十进制)
  • 0xFEE0 — 全角与半角字符的固定偏移量(65248)

示例

将半角字母 'A'(U+0041,十进制 65)转换为全角 'A':65 + 0xFEE0 = 65 + 65248 = 65313(U+FF21)。结果即为全角大写 A。反向转换:全角 'A'(U+FF21,十进制 65313)减去 0xFEE0 得 65,即半角 'A'。

适用范围

适用于 ASCII 可打印字符(U+0021~U+007E)与对应全角字符(U+FF01~U+FF5E)之间的转换。不适用于汉字、标点符号(如逗号、句号)及非 ASCII 字符,这些字符有独立码位映射规则。依据 Unicode 标准(ISO/IEC 10646)。

原理图

用户输入全角/半角文本浏览器内逐字符Unicode 码点判断(全角→半角偏移)输出结果转换后文本用户选择转换方向/范围本地字符映射字母/数字/标点分别处理实时预览无网络请求
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

import unicodedata

# 全角→半角(字母、数字、标点)
def fullwidth_to_halfwidth(text: str) -> str:
    result = []
    for char in text:
        # 全角字母/数字/标点(FF01-FF5E)映射到半角(21-7E)
        code = ord(char)
        if 0xFF01 <= code <= 0xFF5E:
            result.append(chr(code - 0xFEE0))
        # 全角空格(3000)→ 半角空格(0020)
        elif code == 0x3000:
            result.append(chr(0x0020))
        else:
            result.append(char)
    return ''.join(result)

# 半角→全角(字母、数字、标点)
def halfwidth_to_fullwidth(text: str) -> str:
    result = []
    for char in text:
        code = ord(char)
        # 半角字母/数字/标点(21-7E)映射到全角(FF01-FF5E)
        if 0x0021 <= code <= 0x007E:
            result.append(chr(code + 0xFEE0))
        # 半角空格(0020)→ 全角空格(3000)
        elif code == 0x0020:
            result.append(chr(0x3000))
        else:
            result.append(char)
    return ''.join(result)

# 示例
text = "Hello, World!123"
print(fullwidth_to_halfwidth(text))  # Hello, World!123

half = "Hello, World!123"
print(halfwidth_to_fullwidth(half))  # Hello, World!123
package main

import (
	"fmt"
	"strings"
)

// FullToHalf 全角→半角(字母、数字、标点)
func FullToHalf(s string) string {
	var builder strings.Builder
	for _, r := range s {
		switch {
		case r >= 0xFF01 && r <= 0xFF5E:
			builder.WriteRune(r - 0xFEE0)
		case r == 0x3000:
			builder.WriteRune(0x0020)
		default:
			builder.WriteRune(r)
		}
	}
	return builder.String()
}

// HalfToFull 半角→全角(字母、数字、标点)
func HalfToFull(s string) string {
	var builder strings.Builder
	for _, r := range s {
		switch {
		case r >= 0x0021 && r <= 0x007E:
			builder.WriteRune(r + 0xFEE0)
		case r == 0x0020:
			builder.WriteRune(0x3000)
		default:
			builder.WriteRune(r)
		}
	}
	return builder.String()
}

func main() {
	text := "Hello, World!123"
	fmt.Println(FullToHalf(text)) // Hello, World!123

	half := "Hello, World!123"
	fmt.Println(HalfToFull(half)) // Hello, World!123
}
// 全角→半角(字母、数字、标点)
function fullToHalf(text) {
  return text.replace(/[\uFF01-\uFF5E\u3000]/g, (char) => {
    const code = char.charCodeAt(0);
    if (code === 0x3000) return String.fromCharCode(0x0020);
    return String.fromCharCode(code - 0xFEE0);
  });
}

// 半角→全角(字母、数字、标点)
function halfToFull(text) {
  return text.replace(/[\u0021-\u007E\u0020]/g, (char) => {
    const code = char.charCodeAt(0);
    if (code === 0x0020) return String.fromCharCode(0x3000);
    return String.fromCharCode(code + 0xFEE0);
  });
}

// 示例
const text = 'Hello, World!123';
console.log(fullToHalf(text)); // Hello, World!123

const half = 'Hello, World!123';
console.log(halfToFull(half)); // Hello, World!123

常见问题

8 个高频疑问

全角和半角到底有什么区别?我什么时候该用全角,什么时候该用半角?
全角字符占两个英文字符宽度(如ABC),半角占一个(如ABC)。中文标点(。,!)必须用全角,英文标点(.,!)和数字字母用半角。编程代码、网址、邮箱地址必须用半角符号,否则会报错。正式中文文档(如政府公文、论文)推荐中文内容用全角标点,数字和英文保持半角。日常聊天或非正式场景混用问题不大,但排版会显得不整齐。
转换后有些字符没变,是不是工具坏了?
不是工具问题。本工具只转换三类字符:全角↔半角的字母(A-Za-z)、数字(0-9)和标点符号(如,。!“”等)。中文汉字本身没有全半角概念,所以转换后汉字不会变。另外,某些特殊符号(如★※◆)不属于标准全半角映射范围,也不会被转换。如果发现某个标点没变,可以检查它是否属于标准全角/半角符号集(如中文引号“”对应半角"",但中文书名号《》没有半角对应)。
为什么我用这个工具转换后,段落里的空格变多了或者变少了?
这是因为全角空格( )和半角空格( )宽度不同。全角空格占一个汉字宽度,半角空格只占半个。转换时如果选择「全角→半角」,全角空格会变成半角空格,视觉上段落缩进或对齐会变化。如果选择「半角→全角」,半角空格会变成全角空格,可能导致排版变松散。建议:中文段落缩进使用全角空格(两个全角空格 = 首行缩进两字符),英文代码或表格对齐使用半角空格。
这个工具和 Word 里的全半角转换有什么区别?哪个更准?
核心算法一致,都是基于 Unicode 码点映射。但本工具有两个优势:① 纯浏览器端运行,无需安装 Office,打开网页即用;② 支持批量粘贴大段文本(Word 有时会受格式影响只转部分)。Word 的强项是保留原格式(字体、颜色、加粗),而本工具只处理文本内容,转换后格式丢失。如果只是纯文本转换,本工具更快;如果需要保留排版格式,建议用 Word 的「更改大小写」功能。
我输入了一串数字,为什么转换后没变化?是不是不支持数字?
支持的。如果数字没变,说明输入的数字本身就是半角或全角状态,和转换方向一致。例如:输入半角数字 123456,选择「半角→全角」,应该变成123456。如果没变,请确认:① 是否选对了转换方向(从什么转成什么);② 数字是否混用了全角和半角(如 123 这种混合情况,工具会统一处理)。可以故意输入几个全角数字(用中文输入法按 Shift+空格切换)测试转换是否生效。
手机端能用吗?会不会有兼容问题?
手机浏览器完全可用。本工具是纯前端 JavaScript 实现,所有主流移动浏览器(Chrome、Safari、Edge、微信内置浏览器、UC 等)均支持。操作逻辑和桌面端一样:粘贴文本 → 选择转换方向 → 点击按钮。注意:手机输入法在全角/半角切换上不如电脑方便,建议先在电脑上整理好文本,再在手机端粘贴转换。iOS 和 Android 上的表现完全一致,因为 Unicode 编码是跨平台的。
转换后标点符号乱了,比如逗号变成句号,怎么回事?
很可能是因为输入文本中混用了中文和英文标点。全角逗号(,)和半角逗号(,)在 Unicode 中是不同字符(U+FF0C vs U+002C),转换时只会改变字符宽度,不会改变符号含义。例如:全角逗号(,)转半角后变成半角逗号(,),但仍然是逗号。如果出现「逗号变句号」的情况,请检查:① 原文本中是否误用了其他符号(如顿号、间隔号);② 是否同时使用了其他文本处理工具(如 Notepad++ 的替换功能)。建议只在本工具内完成转换,不要多次跨工具操作。
转换后文本长度变了,会不会影响字数统计?
会影响。全角字符占 2 个字节(UTF-8 编码下),半角字符占 1 个字节。转换后字节数会变化:全角→半角,字节数减少;半角→全角,字节数增加。但字符数量(字符串长度)不变——因为「全角 A」和「半角 A」在 JavaScript 中都计为 1 个字符。如果字数统计软件按字符数算,结果不变;如果按字节数算(如某些数据库字段限制字节数),结果会变。建议转换前先确认字数统计工具的统计方式。
选择 打开 +新窗口 esc关闭