C#截取指定字节长度的中英文混合字符串

小岛来信
小岛来信
发布时间:2026-10-14| 6人浏览过
原创

在C#开发中,处理数据库存储或界面显示限制时,经常需要按字节而非字符个数来截取包含中文的字符串。由于汉字通常占2个字节而英文字母占1个字节,直接截取字符可能导致截断。本文提供基于Encoding.Default的判断逻辑和完整代码实现。

问题背景与解决方案

在中英文混合场景下,string.Length属性返回的是字符数量,而非字节数。若前端或数据库要求固定字节宽度(例如10字节),直接使用Substring容易切断多字节字符导致乱码。

解决方案是遍历字符串中的每个字符,计算其实际占用字节数。当累计字节数达到目标上限时停止追加,从而确保截取后的字符串完整性。

核心实现代码

以下代码封装了两个静态方法:StrLength用于计算准确的字节长度,StrCut用于执行截取操作。逻辑基于Windows默认编码(通常为GBK)进行验证。

复制代码 代码如下:
using System.Text.RegularExpressions;
using System.Text;

/// 
/// 字符串长度(按字节算)
/// 
/// 
/// 
static int StrLength(string str)
{
    int len = 0;
    byte[] b;

    for (int i = 0; i < str.Length; i++)
    {
        b = Encoding.Default.GetBytes(str.Substring(i,1));
        if (b.Length > 1)
            len += 2;
        else
            len++;
    }

    return len;
}

/// 
/// 截取指定长度字符串(按字节算)
/// 
/// 
/// 
/// 
static string StrCut(string str, int length)
{
    int len = 0;
    byte[] b;
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.Length; i++)
    {
        b = Encoding.Default.GetBytes(str.Substring(i, 1));
        if (b.Length > 1)
            len += 2;
        else
            len++;

        if (len >= length)
            break;

        sb.Append(str[i]);
    }

    return sb.ToString();
}

代码使用说明

第1步:引入必要的命名空间

确保文件头部包含System.Text以支持StringBuilder和Encoding类。

第2步:调用截取方法

在业务逻辑中调用StrCut函数,传入原始字符串和目标字节长度。例如:

  • 输入字符串:"Hello World! 你好"
  • 指定长度:10
  • 预期结果:"Hello Worl"(注意:如果截断点恰好落在汉字中间,此算法会停止在截断点之前,保持字符边界完整,避免产生半个汉字)

注意事项

Encoding.Default在非中文Windows环境下可能对应ISO-8859-1或其他编码,导致汉字被识别为1字节,进而引发计算误差。对于纯国际化部署的应用,建议根据目标数据库的具体编码规范(如UTF-8)调整获取字节的方式。

以上就是C#截取中英文混合指定长度字符串的详细内容,更多关于C#字符串处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。