C# 实现全角与半角字符串的转换及判断

山海之间
山海之间
发布时间:2026-10-14 | 2人浏览过
原创

在处理中文文本或用户输入时,经常需要区分和处理全角与半角字符。本文将展示如何利用 C# 的 System.Text.Encoding 进行判断,并通过 Unicode 码值规律编写完整的转换函数。

判断全角与半角状态

全角字符占用两个字节,半角字符占用一个字节。我们可以通过对比字符串的字符数量(Length)与字节数组长度来进行判断。

第1步:判断是否为半角

原理:若字符串所有字符均为半角,则字符数等于字节数。

第2步:判断是否为全角

原理:若字符串包含全角字符且无半角混合干扰(严格来说此逻辑适用于纯全角检测),则字节数约为字符数的两倍。
注意:此方法更适合检测“是否全部为半角”或粗略估计全角占比,精确到每个字符需逐字判断。

第3步:执行代码验证

以下为判断逻辑的核心代码片段:

// 引入命名空间
using System;
using System.Text;

public bool IsHalfWidth(string checkString) {
    // 如果字符数 == 字节数,说明全是半角
    if (checkString.Length == Encoding.Default.GetByteCount(checkString)) {
        return true;
    }
    return false;
}

public bool IsFullWidth(string checkString) {
    // 如果是纯全角字符串,字节数通常是字符数的2倍
    // 注意:此判断假设字符串不包含半角字符混合
    if (2 * checkString.Length == Encoding.Default.GetByteCount(checkString)) {
        return true;
    }
    return false;
}

全角与半角相互转换

全角与半角字符在 Unicode 编码中有固定的偏移量关系:
- 全角空格:12288,半角空格:32
- 其他可见字符:全角与半角的差值固定为 65248

第4步:半角转全角 (ToSBC)

目的:将常见的 ASCII 字符转换为对应的全角形式。

public static string ToSBC(string input) {
    char[] c = input.ToCharArray();
    for (int i = 0; i < c.Length; i++) {
        if (c[i] == 32) { // 处理半角空格
            c[i] = (char)12288;
            continue;
        }
        if (c[i] < 127) { // 半角字符范围 33-126
            c[i] = (char)(c[i] + 65248);
        }
    }
    return new string(c);
}

第5步:全角转半角 (ToDBC)

目的:将全角字符还原为标准 ASCII 格式。

public static string ToDBC(string input) {
    char[] c = input.ToCharArray();
    for (int i = 0; i < c.Length; i++) {
        if (c[i] == 12288) { // 处理全角空格
            c[i] = (char)32;
            continue;
        }
        if (c[i] > 65280 && c[i] < 65375) { // 全角字符范围 65281-65374
            c[i] = (char)(c[i] - 65248);
        }
    }
    return new string(c);
}

注意事项与排错

  • 编码依赖:判断字节数时使用 Encoding.Default 依赖于系统默认编码(通常为 GBK/GB2312 对于中文 Windows)。若在 Linux/macOS 或 UTF-8 环境下,建议明确使用 Encoding.UTF8 并进行相应逻辑调整,因为 UTF-8 中汉字占3字节。
  • 特殊符号:上述转换仅覆盖常见标点与字母数字。部分生僻符号或非标准全角字符可能需要扩展判断区间。
  • 性能优化:对于海量数据,避免频繁创建 char[] 副本,可考虑使用 Span<char> 或内存池技术,但常规业务场景中以上代码已足够高效。

以上就是 C# 实现全角与半角转换及判断的详细内容,更多关于 C# 字符串处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表