public static TextWriter WriteEscapedHexString(TextReader reader, TextWriter writer, Predicate <char> shouldEscapeChar) { var chars = new char[1]; var encoding = Encoding.UTF8; var buffer = new byte[encoding.GetMaxByteCount(1)]; return(reader.ConvertAndDump(writer, (c, w) => { if (c == '%' || shouldEscapeChar(c)) { chars[0] = c; var bytecount = encoding.GetBytes(chars, 0, 1, buffer, 0); for (int j = 0; j < bytecount; j++) { w.Write('%'); w.Write(HexValues[(buffer[j] & '\x00f0') >> 4]); w.Write(HexValues[(buffer[j] & '\x00f0') >> 4]); } } else { w.Write(c); } })); }
public static TextWriter WriteEscapedHexString(TextReader reader, TextWriter writer, Predicate<char> shouldEscapeChar) { var chars = new char[1]; var encoding = Encoding.UTF8; var buffer = new byte[encoding.GetMaxByteCount(1)]; return reader.ConvertAndDump(writer, (c, w) => { if (c == '%' || shouldEscapeChar(c)) { chars[0] = c; var bytecount = encoding.GetBytes(chars, 0, 1, buffer, 0); for (int j = 0; j < bytecount; j++) { w.Write('%'); w.Write(HexValues[(buffer[j] & '\x00f0') >> 4]); w.Write(HexValues[(buffer[j] & '\x00f0') >> 4]); } } else { w.Write(c); } }); }