The quoted strings are stored directly in the basic program with 1 byte per char.
They can contain any byte so filling them with compressed data is ok. You may need to escape quotes.
I'm not sure how you would get basic to accept a new token so it may need to be an rsx if you want to go with this method.
Another would be to split strings into words. Then you could join words to make sentences with a string of bytes.
AMSDOS does similar to generate it's strings. AMSDOS also has special control codes where the drive and user are substituted - so this could be a possibility.
I have seen some data embedded in REM statements before. This could be used to store data and would save the need for DATA statements to poke the binary code into memory.
I know this is not related but have you tried BEEBUG's basic toolkit? I believe it has a compress command that puts a lot on one line and reduces the number of lines.http://www.cpc-power.com/index.php?page=detail&num=7261
Ideally you could do with a way to keep it in basic.
If you had words stored in ram you could probably do this:
10 rem Thisisstring
20 w=1:gosub 5000:w=2:gosub 5000:end
5000 rem print word
5010 len = peek(remaddr+(w*3)+0):addr = peek(remaddr+(w*3)+1)+addr(peek(remaddr+(w*3)+2)*256:
5020 poke @a$+0,len
5030 poke @a$+1,addr and 255:poke @a$+2,addr/256:print a$
If you did it word by word you could avoid needing spaces too. You could add spaces only when needed and you could control word wrap automatically by counting the number of chars output so far.
Just some ideas. Sorry I didn't have answers.