PHP base64_decode C # -Äquivalent
Frage
Ich versuche, einen PHP-Skript zu imitieren, die Folgendes tun:
- ersetzen, um ein GET vaiable ist jeder Raum mit einem Pluszeichen ($ var = preg_replace ( "/ \ s /", "+", $ _ GET [ 'var']);)
- Decodierung zu base64: base64_decode ($ var);
1. i ein Verfahren hinzugefügt führt eine base64-Decodierung:
public string base64Decode(string data)
{
try
{
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
System.Text.Decoder utf8Decode = encoder.GetDecoder();
byte[] todecode_byte = Convert.FromBase64String(data);
int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
char[] decoded_char = new char[charCount];
utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
string result = new String(decoded_char);
return result;
}
catch (Exception e)
{
throw new Exception("Error in base64Decode" + e.Message);
}
}
aber es Nähte, dass UTF-8 ist die Arbeit nicht tun, so habe ich versucht, die gleiche Methode, aber mit einer UTF-7
public string base64Decode(string data)
{
try
{
System.Text.UTF7Encoding encoder = new System.Text.UTF7Encoding();
System.Text.Decoder utf7Decode = encoder.GetDecoder();
byte[] todecode_byte = Convert.FromBase64String(data);
int charCount = utf7Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
char[] decoded_char = new char[charCount];
utf7Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
string result = new String(decoded_char);
return result;
}
catch (Exception e)
{
throw new Exception("Error in base64Decode" + e.Message);
}
}
eine letzte Sache zu sagen, die erfolgreiche PHP-Decodierung enthält Sonderzeichen, wie das eingetragenen Zeichen und Markenzeichen, aber die C # -Version nicht!
Auch dann, wenn PHP base64_decode vom Server Sprache betroffen?
Lösung
UTF-7 ist sehr unwahrscheinlich zu sein, was Sie wollen. Sie müssen wirklich wissen, welche Kodierung PHP verwendet. Es können , um die Standard-Kodierung für Ihr System. Zum Glück ist es viel einfacher zu entschlüsseln, als Sie es machen:
public static string base64Decode(string data)
{
byte[] binary = Convert.FromBaseString(data);
return Encoding.Default.GetString(binary);
}
Es gibt keine Notwendigkeit, explizit Kampf mit Encoder
:)
Eine andere Möglichkeit ist, dass PHP ist mit ISO Latin 1, die Codepage 28591:
public static string base64Decode(string data)
{
byte[] binary = Convert.FromBaseString(data);
return Encoding.GetEncoding(28591).GetString(binary);
}
Das PHP Handbuch unhelpfully sagt nur: „Bevor PHP 6, ein Zeichen das gleiche wie ein Byte Das heißt, es sind genau 256 verschiedene Zeichen möglich..“ Schade, dass es nicht sagen, was jedes Byte tatsächlich Mittel ...