检查字符串是否包含Unicode字符的范围

时间:2016-02-18 11:37:57

标签: c# .net unicode

检查字符串是否包含指定的Unicode字符的最佳方法是什么?我的问题是我无法解析字符串/字符来格式化\ u [byte] [byte] [byte] [byte]。我在StackOverflow上遵循了许多教程和线程,但是当我有这样的方法时:

private bool ContainsInvalidCharacters(string name)
{
    if (translation.Any(c => c > 255))
    {
        byte[] bytes = new byte[name.Length];
        Buffer.BlockCopy(name.ToCharArray(), 0, bytes, 0, bytes.Length);
        string decoded = Encoding.UTF8.GetString(bytes, 0, name.Length);
        (decoded.Contains("\u0001"))
        {
            //do something
        }
}

我输出如下:“c \ 0o \ 0n \ 0t \ 0i \ 0n \ 0g \ 0u \ 0t \ 0”。

这真的不是我的一杯茶。我将不胜感激任何帮助。

3 个答案:

答案 0 :(得分:4)

如果我要描绘一个愤怒的Unicode字符,这将是我的赌注:

ლ(〜•︿•〜)つ︻̷┻̿═━一

所以要回答你的问题,那就是检查字符串中的 rage 你可以简单地说:

private bool ContainsInvalidCharacters(string name)
{
    return name.IndexOf("ლ(~•̀︿•́~)つ︻̷┻̿═━一") != -1;
}

答案 1 :(得分:2)

这是你想要的吗?

public static bool ContainsInvalidCharacters(string name)
{
    return name.IndexOfAny(new[] 
    {
        '\u0001', '\u0002', '\u0003', 
    }) != -1;
}

bool res = ContainsInvalidCharacters("Hello\u0001");

请注意使用'\uXXXX''表示char而不是string

答案 2 :(得分:0)

同时检查

    /// <summary>
    /// Check invalid character based on the pattern
    /// </summary>
    /// <param name="text">The string</param>
    /// <returns></returns>
    public static string IsInvalidCharacters(this string text)
    {
        string pattern = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
        var match = Regex.Match(text, pattern, "");
        return match.Sucess;
    }