C# compare different Encoding pattern between UTF8 and UTF32 based on Md5
程序员文章站
2022-05-07 14:02:45
I had validated that different encoding mode can generate different result,they are not identical. Besides,the File.ReadAllBytes may based on UTF8 bec ......
1 using system; 2 using system.text; 3 using system.io; 4 using system.security.cryptography; 5 6 static void main(string[] args) 7 { 8 comparefilegetbytes("lyf.txt"); 9 console.readline(); 10 } 11 12 static void comparefilegetbytes(string filefullname) 13 { 14 byte[] filereadallbytes = file.readallbytes(filefullname); 15 string filereadallbytesmd5 = getbytesmd5(filereadallbytes); 16 17 string utf8md5 = string.empty; 18 using (streamreader reader = new streamreader(filefullname)) 19 { 20 string textresult = reader.readtoend(); 21 byte[] utf8bytes = encoding.utf8.getbytes(textresult); 22 utf8md5 = getbytesmd5(utf8bytes); 23 } 24 25 string utf32md5 = string.empty; 26 using (streamreader utf32reader = new streamreader(filefullname)) 27 { 28 string textresult = utf32reader.readtoend(); 29 byte[] utf32bytes = encoding.utf32.getbytes(textresult); 30 utf32md5 = getbytesmd5(utf32bytes); 31 } 32 33 34 console.writeline($"filereadallbytesmd5:{filereadallbytesmd5},utf8md5:{utf8md5}"); 35 36 if (string.equals(filereadallbytesmd5, utf8md5)) 37 { 38 console.writeline($"{nameof(filereadallbytesmd5)} is equal with {nameof(utf8md5)}!"); 39 } 40 else 41 { 42 console.writeline($"{nameof(filereadallbytesmd5)} is not equal with {nameof(utf8md5)}!"); 43 } 44 45 console.writeline($"utf8md5:{utf8md5},utf32md5:{utf32md5}"); 46 if (string.equals(utf8md5, utf32md5)) 47 { 48 console.writeline($"{nameof(utf8md5)} is equals with {nameof(utf32md5)}"); 49 } 50 else 51 { 52 console.writeline($"{nameof(utf8md5)} is not equals with {nameof(utf32md5)}"); 53 } 54 } 55 56 static string getbytesmd5(byte[] bytesdata) 57 { 58 stringbuilder md5builder = new stringbuilder(); 59 using(md5cryptoserviceprovider md5=new md5cryptoserviceprovider()) 60 { 61 byte[] md5bytes = md5.computehash(bytesdata); 62 for(int i=0;i<md5bytes.length;i++) 63 { 64 md5builder.append(md5bytes[i].tostring("x2")); 65 } 66 } 67 return md5builder.tostring(); 68 }
i had validated that different encoding mode can generate different result,they are not identical.
besides,the file.readallbytes may based on utf8 because they render the identical result!