C# System.Text.Encoding.UTF8.GetBytes在同一台计算机、不同程序上的字符串的不同值

C# System.Text.Encoding.UTF8.GetBytes在同一台计算机、不同程序上的字符串的不同值,c#,string,encoding,C#,String,Encoding,我正在做一件事 System.Text.Encoding.UTF8.GetBytes(s) 在使用.NET2.0框架的两个不同程序(一个控制台,一个web)中的字符串上,返回的编码与这两个程序不同。对于字符串“everything”,我得到了相同的结果,但是对于字符串“OnI3UwUc”,我得到了两个不同的结果 对于“OnI3UwUc”,6F6E69337577563 对于另一个程序中的“ONI3UUUC”,我得到4f63493355775563 在 我试图编写此代码,以与我拥有的一些经典A

我正在做一件事

System.Text.Encoding.UTF8.GetBytes(s) 
在使用.NET2.0框架的两个不同程序(一个控制台,一个web)中的字符串上,返回的编码与这两个程序不同。对于字符串“everything”,我得到了相同的结果,但是对于字符串“OnI3UwUc”,我得到了两个不同的结果

对于“OnI3UwUc”,6F6E69337577563 对于另一个程序中的“ONI3UUUC”,我得到4f63493355775563

我试图编写此代码,以与我拥有的一些经典ASP代码相同的方式进行操作:

Dim crypt : Set crypt = CreateObject("Chilkat.Crypt2")      
crypt.UnlockComponent("TXTECHCrypt_6X6EnMdFNRCe") 
crypt.HashAlgorithm = "sha1"  
crypt.CryptAlgorithm = "aes" 
crypt.CipherMode = "ecb" 
crypt.EncodingMode = "hex" 
crypt.SetEncodedKey "100202330405560608790A8B0C9D0EAF","hex" 

这是极不可能的。对两个字符串使用
File.writealText(“C:/file1.txt”,s)
,并仔细比较它们。他们会有所不同


在极不可能的情况下,它们实际上是相等的,请尝试删除这两个程序中不影响此输出的所有内容,然后将其发布在connect.microsoft.com上,并链接到此处。但是请注意,超过100行的程序几乎肯定可以进一步简化。

您提到,从其中一个程序获得的UTF-8是
6F6E69337577563
。这将解码回
“oni3uwuc”
。换句话说,您的另一个程序在UTF-8编码之前将所有字母小写。

发布两个不同的结果会不会对您要求太高?我很难相信这一点。您如何验证通话结果?打印结果。如果您正在使用调试器查看调用的结果,请不要这样做。它会误导你。这个参数是在你的程序
Encoding.UTF8.GetBytes(“OnI3UwUc”)
中硬编码的,还是来自一个编码不好的PHP脚本的变量发布到你的web应用程序中(嘿,我对PHP没有任何异议)?如果你说它在两个程序中都是硬编码的,并且产生了不同的字节数组,那么我们可能会有一个需要担心的情况:-)在那之前它是正常的。@Caveatrob:这两个都不是有效的UTF-8。您不能从
Encoding.UTF8.GetBytes
接收此输出。也许你用来把它转换成十六进制的代码中有个bug
“OnI3UwUc”
的正确UTF-8是
4F6E4933577563