Frage

Ich versuche, einen PHP-Skript zu imitieren, die Folgendes tun:

  1. ersetzen, um ein GET vaiable ist jeder Raum mit einem Pluszeichen ($ var = preg_replace ( "/ \ s /", "+", $ _ GET [ 'var']);)
  2. 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?

War es hilfreich?

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 ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top