You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ICU库正确处理包含NBSP的C++字符串修剪?

解决ICU UnicodeString::trim()无法修剪NBSP的问题

ICU的UnicodeString::trim()默认仅修剪U+0020 普通空格,NBSP(U+00A0 非断空格)虽属Unicode标准,但不在默认修剪字符集合内,因此会被忽略。无需完全自行实现修剪逻辑,通过ICU提供的重载接口即可解决:

方案1:指定要修剪的特定空白字符

如果仅需处理普通空格和NBSP,直接定义包含这两个字符的集合传入trim():

std::string trim(const std::string &input)
{
    icu::UnicodeString unicodeString = icu::UnicodeString::fromUTF8(input);

    // 包含普通空格(U+0020)和NBSP(U+00A0)的修剪字符数组
    const UChar trimChars[] = {' ', 0xA0, 0};
    unicodeString.trim(trimChars);

    std::string result;
    unicodeString.toUTF8String(result);

    return result;
}

方案2:修剪所有Unicode标准空白字符

如果需要覆盖所有Unicode定义的空白字符(比如全角空格、窄NBSP、数字空格等),可利用ICU的u_isWhitespace()函数判断空白属性,结合trim()的函数重载:

#include <unicode/uscript.h>

// 判断是否为Unicode空白字符的辅助函数
bool isWhitespace(UChar32 c) {
    return u_isWhitespace(c);
}

std::string trim(const std::string &input)
{
    icu::UnicodeString unicodeString = icu::UnicodeString::fromUTF8(input);

    // 传入自定义判断函数,修剪所有Unicode空白
    unicodeString.trim(isWhitespace);

    std::string result;
    unicodeString.toUTF8String(result);

    return result;
}

方案2通用性更强,能处理所有符合Unicode标准的空白类字符,适合需要全面处理文本空白的场景。

内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:55:59