Ejemplo n.º 1
0
        private static PythonTuple DoEncode(Encoding encoding, object input, string errors, bool includePreamble)
        {
            // input should be some Unicode object
            string res;

            if (Converter.TryConvertToString(input, out res))
            {
                StringBuilder sb = new StringBuilder();

                encoding = (Encoding)encoding.Clone();

#if FEATURE_ENCODING // EncoderFallback
                StringOps.SetEncoderFallback(encoding, EncoderFallback.ExceptionFallback);
#endif

                if (includePreamble)
                {
                    byte[] preamble = encoding.GetPreamble();
                    for (int i = 0; i < preamble.Length; i++)
                    {
                        sb.Append((char)preamble[i]);
                    }
                }

                byte[] bytes = encoding.GetBytes(res);
                for (int i = 0; i < bytes.Length; i++)
                {
                    sb.Append((char)bytes[i]);
                }
                return(PythonTuple.MakeTuple(sb.ToString(), res.Length));
            }
            throw PythonOps.TypeErrorForBadInstance("cannot decode {0}", input);
        }
Ejemplo n.º 2
0
        internal static Encoding MakeNonThrowing()
        {
            Encoding enc = new PythonAsciiEncoding();

#if FEATURE_ENCODING
            // we need to Clone the new instance here so that the base class marks us as non-readonly
            enc = (Encoding)enc.Clone();
            StringOps.SetDecoderFallback(enc, new NonStrictDecoderFallback());
            StringOps.SetEncoderFallback(enc, new NonStrictEncoderFallback());
#endif
            return(enc);
        }