2013-08-27 189 views
1

这里是我的问题: 我有,我认为它是二进制字符串:字符串类型转换C#

zv�Q6��.�����E3r 

我想这个字符串转换的东西可以阅读。我怎样才能在C#中做到这一点?

+3

您需要知道使用哪种编码。 –

+0

我记得我在这个例子中使用了PHP的bin2hex函数,并得到了适当的转换。这是否意味着我应该在C#中将此字符串转换为十六进制? – A23149577

回答

1

您可以尝试枚举(测试)所有可用的编码,并找出编码合理文本的 。不幸的是,当它不是一个绝对的解决方案: 它可能是一个错误转换的信息损失。

public static String GetAllEncodings(String value) { 
     List<Encoding> encodings = new List<Encoding>(); 

     // Ordinary code pages 
     foreach (EncodingInfo info in Encoding.GetEncodings()) 
     encodings.Add(Encoding.GetEncoding(info.CodePage)); 

     // Special encodings, that could have no code page 
     foreach (PropertyInfo pi in typeof(Encoding).GetProperties(BindingFlags.Static | BindingFlags.Public)) 
     if (pi.CanRead && pi.PropertyType == typeof(Encoding)) 
      encodings.Add(pi.GetValue(null) as Encoding); 

     foreach (Encoding encoding in encodings) { 
     Byte[] data = Encoding.UTF8.GetBytes(value); 
     String test = encoding.GetString(data).Replace('\0', '?'); 

     if (Sb.Length > 0) 
      Sb.AppendLine();  

     Sb.Append(encoding.WebName); 
     Sb.Append(" (code page = "); 
     Sb.Append(encoding.CodePage); 
     Sb.Append(")"); 

     Sb.Append(" -> "); 
     Sb.Append(test); 
     } 

     return Sb.ToString(); 
    } 

    ... 


// Test/usage 

    String St = "Некий русский текст";  // <- Some Russian Text 
    Byte[] d = Encoding.UTF32.GetBytes(St); // <- Was encoded as UTF 32 
    St = Encoding.UTF8.GetString(d);  // <- And erroneously read as UTF 8 

    // Let's see all the encodings: 
    myTextBox.Text = GetAllEncodings(St); 

    // In the myTextBox.Text you can find the solution: 
    // .... 
    // utf-32 (code page = 12000) -> Некий русский текст 
    // .... 
1
byte[] hexbytes = System.Text.Encoding.Unicode.GetBytes(); 

这给你的字符串的十六进制字节,但你必须知道你的字符串的编码,并用'Unicode'代替。