Two types, nothing else
RLP encodes byte strings and lists of byte strings. There are no numbers, no maps, no booleans, and no strings in the text sense. Everything an Ethereum client stores in it, a nonce, an address, a gas limit, is a minimal big-endian byte string, and the meaning comes from the position in the list.
A single byte below 0x80 encodes itself. 0x83646f67 is a 3-byte string, dog. 0xc88363617483646f67 is a list holding cat and dog.
Reading a transaction
A legacy transaction is a list of nine items: nonce, gas price, gas limit, to, value, data, v, r, s. An EIP-1559 transaction is a list of twelve, prefixed by the type byte 0x02 which sits outside the RLP payload and has to be removed first.
Empty items are common and correct. A contract creation has an empty to, and a plain transfer has empty data. Both show as <empty> rather than as zero, because RLP distinguishes an empty string from a byte holding zero.
Leading zeros
RLP requires the minimal encoding of a number, so a value of 1 is 0x01 and never 0x0001. A payload carrying leading zeros in a quantity field was produced by a broken encoder and will hash differently from the canonical form, which is enough to invalidate a signature.