首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字符串的开头和结尾删除不可见的unicode字符?

如何从字符串的开头和结尾删除不可见的unicode字符?
EN

Stack Overflow用户
提问于 2019-11-15 05:27:46
回答 3查看 1.5K关注 0票数 0

如何可靠地从字符串的开头和结尾删除不可见字符?在我的例子中,我的字符串以https://www.fileformat.info/info/unicode/char/202a/index.htm字符开头。但是,string.Trim()并没有删除它,如下所示:

代码语言:javascript
复制
var myString = "\u202atest";
myString.Trim();
// Prints:
// "‪test"
myString.Trim().ToCharArray();
// Prints:
// {char[5]}
//     [0]: 8234 '‪'
//     [1]: 116 't'
//     [2]: 101 'e'
//     [3]: 115 's'
//     [4]: 116 't'

在.NET框架API中是否有一个函数可以修剪所有这样的字符?我想有比这个更多的,我想避免必须手动指定每一个。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-15 06:52:30

看不见是模糊的。兼容Unicode的解决方案: regex类一般类别 [\p{Control}\p{Format}\p{Nonspacing_Mark}\p{Enclosing_Mark}\p{Line_Separator}\p{Paragraph_Separator}]中的字符没有显示宽度。不要用任何东西来代替他们。

代码语言:javascript
复制
$ length "\x{202a}test" =~ s/[\p{Cc}\p{Cf}\p{Mn}\p{Me}\p{Zl}\p{Zp}]//r
4

在C#中:

代码语言:javascript
复制
public static string RemoveCharactersWithoutDisplayWidth(this string str)
{
    var regex = new Regex(@"[\p{Cc}\p{Cf}\p{Mn}\p{Me}\p{Zl}\p{Zp}]");
    return regex.Replace(str, "");
}
票数 4
EN

Stack Overflow用户

发布于 2019-11-15 07:45:51

你可以试试:

代码语言:javascript
复制
mystring = myString.Trim('\u202a');

如果您有更多类似的字符要修剪,您可以将这些字符定义为数组。

代码语言:javascript
复制
char[] trimChars = {'\u202a','\u202b'};//More chars as your wish
mystring = myString.Trim(trimChars);
票数 -1
EN

Stack Overflow用户

发布于 2019-11-15 07:57:59

您可以尝试分析字节:

代码语言:javascript
复制
var s = "\u202atest";
string s2 = null;
byte[] bytes = new byte[s.Length * sizeof(char)];
Buffer.BlockCopy(s.ToCharArray(), 0, bytes, 0, bytes.Length);
if (bytes[0] == 0x2a && bytes[1] == 0x20)
{
    char[] c = new char[(bytes.Length - 2) / sizeof(char)];
    Buffer.BlockCopy(bytes, 2, c, 0, bytes.Length - 2);
    s2 = new string(c);
}
var c2 = s2.ToCharArray();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58870846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档