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); }
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); }