public static string ConvertToString(byte[] bytes, string encoding) {
if (bytes == null)
return PdfObject.NOTHING;
if (encoding == null || encoding.Length == 0) {
char[] c = new char[bytes.Length];
for (int k = 0; k < bytes.Length; ++k)
c[k] = (char)(bytes[k] & 0xff);
return new String(c);
}
IExtraEncoding extra = (IExtraEncoding)extraEncodings[encoding.ToLower(System.Globalization.CultureInfo.InvariantCulture)];
if (extra != null) {
String text = extra.ByteToChar(bytes, encoding);
if (text != null)
return text;
}
char[] ch = null;
if (encoding.Equals(BaseFont.WINANSI))
ch = winansiByteToChar;
else if (encoding.Equals(PdfObject.TEXT_PDFDOCENCODING))
ch = pdfEncodingByteToChar;
if (ch != null) {
int len = bytes.Length;
char[] c = new char[len];
for (int k = 0; k < len; ++k) {
c[k] = ch[bytes[k] & 0xff];
}
return new String(c);
}
String nameU = encoding.ToUpper(System.Globalization.CultureInfo.InvariantCulture);
bool marker = false;
bool big = false;
int offset = 0;
if (bytes.Length >= 2) {
if (bytes[0] == (byte)254 && bytes[1] == (byte)255) {
marker = true;
big = true;
offset = 2;
}
else if (bytes[0] == (byte)255 && bytes[1] == (byte)254) {
marker = true;
big = false;
offset = 2;
}
}
Encoding enc = null;
if (nameU.Equals("UNICODEBIGUNMARKED") || nameU.Equals("UNICODEBIG"))
enc = new UnicodeEncoding(marker ? big : true, false);
if (nameU.Equals("UNICODELITTLEUNMARKED") || nameU.Equals("UNICODELITTLE"))
enc = new UnicodeEncoding(marker ? big : false, false);
if (enc != null)
return enc.GetString(bytes, offset, bytes.Length - offset);
return IanaEncodings.GetEncodingEncoding(encoding).GetString(bytes);
}