*read* is for reading list structure and literals as in actual lisp source code. The syntax decides what type the end result will have. *read-line* reads a line of text and returns it as a string not matter what the input looks like.*read-char* read one character and returns it as such.

READ is used by the common-lisp reader for reading code, so it produces results following the rules of common-lisp syntax. If your file format used (double-)quoted strings then you would get what you wanted, but if your format is fixed by something else then you will need to use a different approach.

For parsing in a way more similar to the way it would be done in other languages you can use READ-CHAR, READ-LINE, and READ-SEQUENCE, but this will leave you having to write parsing for all the weird and wacky ways of expressing numbers

The common-lisp approach to this task is to use a modified READTABLE, which lets you override the parts of common-lisp syntax that you want, while re-using whatever makes sense for your project.

It's worth observing, (as an aside), that old lisp programs did used to use symbols as strings, and by setting READTABLE-CASE to