Блин cp1251 понимает, но опять же тупит, то не то выделит, то не правильно перенесет... Вот если сделать такой код: PHP: <?php $Highlighter = new GeSHi(mb_convert_encoding($this->_sCode, 'ASCII', 'UTF-8'), $this->_sCodeName); $Highlighter->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); $Highlighter->set_encoding('ASCII'); return mb_convert_encoding($Highlighter->parse_code(), 'UTF-8', 'ASCII'); то все впрорядке, только кириллица не отображается верно. Возникает вопрос почему. Вероятный ответ. Что то не так после 127 кода, потому что там как бы заканчивается ASCII и начинается cp1251. Смотрю в GeShi.php. И что я нахожу? А вот что: PHP: <?php if ($es_char == "\n") { // don't put a newline around newlines $string .= "</span>\n"; $start = $es_pos + 2; } else if (ord($es_char) >= 128) { //This is an non-ASCII char (UTF8 or single byte) //This code tries to work around SF#2037598 ... if(function_exists('mb_substr')) { $es_char_m = mb_substr(substr($part, $es_pos+1, 16), 0, 1, $this->encoding); $string .= $es_char_m . '</span>'; } else if (!GESHI_PHP_PRE_433 && 'utf-8' == $this->encoding) { if(preg_match("/[\xC2-\xDF][\x80-\xBF]". "|\xE0[\xA0-\xBF][\x80-\xBF]". "|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}". "|\xED[\x80-\x9F][\x80-\xBF]". "|\xF0[\x90-\xBF][\x80-\xBF]{2}". "|[\xF1-\xF3][\x80-\xBF]{3}". "|\xF4[\x80-\x8F][\x80-\xBF]{2}/s", $part, $es_char_m, null, $es_pos + 1)) { $es_char_m = $es_char_m[0]; } else { $es_char_m = $es_char; } $string .= $this->hsc($es_char_m) . '</span>'; } else { $es_char_m = $this->hsc($es_char); } $start = $es_pos + strlen($es_char_m) + 1; } else { $string .= $this->hsc($es_char) . '</span>'; $start = $es_pos + 2; } Че это за фигня Вернее SF#2037598 - это что такое? Кто-нибудь знает?