The code that sends the price to the printer was written with currency symbols in mind, and selects the correct code page before sending the code for the £ symbol.
The code that sends the "product name" was not, and doesn't correctly translate its input to the code page that the printer is using.
When I made a homemade POS system for a bar, years ago, I ran all the printers in bitmap mode and rendered the receipts in software, to sidestep this and other problems. The performance was still acceptable, but I think the reason many POS systems don't go this route is compatibility; they have to work with many models of printer and bitmap support is not universal, and even among those printers that support it I am not sure if it is standardised.
The code that sends the "product name" was not, and doesn't correctly translate its input to the code page that the printer is using.
When I made a homemade POS system for a bar, years ago, I ran all the printers in bitmap mode and rendered the receipts in software, to sidestep this and other problems. The performance was still acceptable, but I think the reason many POS systems don't go this route is compatibility; they have to work with many models of printer and bitmap support is not universal, and even among those printers that support it I am not sure if it is standardised.