1. Yes it's encoding. Are they in the title or excerpt? I think for either, ideally they need to be entered as £ alternatively you need a function to encode them before they go into the db. You can try just running the output through htmlentities but I don't know if it'll work with just the output being fixed, but it may do.
Also check the charset in your standalone page is the same as for the WordPress page
2. You may find using get_posts() easier than running the whole loop. However, if the excerpt is empty in a post, usually the excerpt is automatically formed from the content (not the case for pages though). Clearly it's not kicking in for you so then you need to call the_content and use a sub string of that to get the first X characters.
So all in all try
<?php
function truncate_str($str, $maxlen) {
if ( strlen($str) <= $maxlen ) return $str;
$newstr = substr($str, 0, $maxlen);
if ( substr($newstr,-1,1) != ' ' ) $newstr = substr($newstr, 0, strrpos($newstr, " "));
return $newstr;
}
?>
<div id="rssfeed">
<?php while (have_posts()): the_post(); ?>
<h2><?php htmlentities(the_title('','',false), ENT_COMPAT , "UTF-8") ?></h2>
<?php
$mycontent = strip_tags(get_the_content());
echo "<p>".truncate_str($mycontent)."[...]</p>\n";
?>
<p><a href="<?php the_permalink(); ?>">Read more...</a></p>
<?php endwhile; ?>
</div>
Note, the first function is to prevent your sub string of the content ending in a split word, so this'll tidy it up. I've run the_title through the htmlentities function, the content shouldn't need it, as WP usually fixes all things like that. If it does then just use the same method to clean that up too.