Есть функция, она скачивает страницу в UTF8. Качает с помощью 10-ого индейца. В ней же я использую UTF8Decode, и возвращаю строку. Вывожу в Мемо. Там где в html были переносы строк, появились квадратики. В чем причина? P.S. Весь остальной текст отображается корректно!
Разные коды перевода строки. Есть такой вариант функции Code: wchar_t Utf8( std::istream &in, void * data ) { char c = in.get(); if( !in ) return 0; // 0xxxxxxx if( 0 == ( c & '\x80' ) ) return wchar_t( c ); // 1111 - error, more than 16-bit char else if( '\xF0' == ( c & '\xF0' ) ) throw Error( BAD_ENCODING ); // 1110xxxx 10xxxxxx 10xxxxxx else if( '\xE0' == ( c & '\xF0' ) ) { char c2 = in.get(); char c3 = in.get(); if( !in ) throw Error( BAD_ENCODING ); return ( wchar_t( c & '\x0F' ) << 12 ) | ( wchar_t( c2 & '\x3F' ) << 6 ) | ( c3 & '\x3F' ); } // 110xxxxx 10xxxxxx else if( '\xC0' == ( c & '\xE0' ) ) { char c2 = in.get(); if( !in ) throw Error( BAD_ENCODING ); return ( wchar_t( c & '\x1F' ) << 6 ) | ( c2 & '\x3F' ); } else throw Error( BAD_ENCODING ); } Или так. Code: function utf8_to_cp1251($utf8) { $windows1251 = ""; $chars = preg_split("//",$utf8); for ($i=1; $i<count($chars)-1; $i++) { $prefix = ord($chars[$i]); $suffix = ord($chars[$i+1]); if ($prefix==215) { $windows1251 .= chr($suffix+80); $i++; } elseif ($prefix==214) { $windows1251 .= chr($suffix+16); $i++; } else { $windows1251 .= $chars[$i]; } } return $windows1251; } function Utf8Win($str,$type="w") { static $conv=''; if (!is_array($conv)) { $conv = array(); for($x=128;$x<=143;$x++) { $conv['u'][]=chr(209).chr($x); $conv['w'][]=chr($x+112); } for($x=144;$x<=191;$x++) { $conv['u'][]=chr(208).chr($x); $conv['w'][]=chr($x+48); } $conv['u'][]=chr(208).chr(129); $conv['w'][]=chr(168); $conv['u'][]=chr(209).chr(145); $conv['w'][]=chr(184); $conv['u'][]=chr(208).chr(135); $conv['w'][]=chr(175); $conv['u'][]=chr(209).chr(151); $conv['w'][]=chr(191); $conv['u'][]=chr(208).chr(134); $conv['w'][]=chr(178); $conv['u'][]=chr(209).chr(150); $conv['w'][]=chr(179); $conv['u'][]=chr(210).chr(144); $conv['w'][]=chr(165); $conv['u'][]=chr(210).chr(145); $conv['w'][]=chr(180); $conv['u'][]=chr(208).chr(132); $conv['w'][]=chr(170); $conv['u'][]=chr(209).chr(148); $conv['w'][]=chr(186); $conv['u'][]=chr(226).chr(132).chr(150); $conv['w'][]=chr(185); } if ($type == 'w') { return str_replace($conv['u'],$conv['w'],$str); } elseif ($type == 'u') { return str_replace($conv['w'], $conv['u'],$str); } else { return $str; } } Не заметил что под делфи нужно но мож переделаеш )
РЕШЕНО! "Квадратики" были только там, где после переноса строки стоял еще и <br>. Заменил все <br>, исчезли квадратики .