代码之家  ›  专栏  ›  技术社区  ›  Shailesh Jaiswal

是否有不区分大小写的Unicode字符编码类?

  •  1
  • Shailesh Jaiswal  · 技术社区  · 14 年前

    我使用以下代码对unicode字符进行字符编码。当我使用DataToEncrypt的值作为'abc'&abc'时,它给了我MD5EncryptedString的不同字符串值

     String DataToEncrypt="abc";
     String MD5EncryptedString = String.Empty;
     MD5 md5 = new MD5CryptoServiceProvider();
     Byte[] encodedBytes = ASCIIEncoding.Default.GetBytes(DataToEncrypt);
     // Byte[] encodedBytes = UTF8Encoding.Default.GetBytes(DataToEncrypt);
      encodedBytes = md5.ComputeHash(encodedBytes);
      MD5EncryptedString = BitConverter.ToString(encodedBytes);
     return MD5EncryptedString;
    

    是否有任何类代替asciientoding,它将为我提供不区分大小写的字符串,这意味着它将为DataToEncrypt变量的'abc'和'abc'提供相同的MD5EncryptedString值?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Jon Skeet    14 年前

    你当前的代码没有使用 任何一个 ASCIIEncoding UTF8Encoding ... 它在系统上使用默认编码,因为它相当于 Encoding.Default

    Encoding.ASCII Encoding.UTF8 .

    给你同样的“abc”和“abc”的结果,我很怀疑。我想你是说你 希望 它可能会给你同样的结果,但它目前没有。

    我建议你用这样的方法,如果你想不区分大小写:

    string lower = string.ToLowerInvariant();
    byte[] data = Encoding.UTF8.GetBytes(lower);
    byte[] hash = md5.ComputeHash(encodedBytes);
    return BitConverter.ToString(hash);
    

    请注意,这以一种不区分区域性的方式提供了大小写不敏感。。。这可能不是所有情况下都理想,但至少是一致的,无论你使用哪种文化。

        2
  •  0
  •   Oded    14 年前

    所有字符编码都使用不同的字节对大写和小写字母进行编码,因此没有办法得到一种能为您做到这一点的编码。

    您可以始终将字符串大写/小写 之前 散列。

        3
  •  0
  •   KeithS    14 年前

    将字符符号转换为序数(字节)在对大写和小写进行编码时总是会给出不同的答案,因为这两个符号在代码页中由两个不同的字节码表示。这对于任何字符编码都是正确的,不管是ASCII、Unicode等。