at least the "or" of Hello world" seems to be correct.

This tells us
* the initialisation is correct
* the contrast is working
* the display character addressing is correct
* every transmitted character seems to be accepted (E, RW and RS seem to work correctly)
* but the data is not correct.

Thus I assume:
* either the data line voltage level is not correct
* or the timing - setup and hold time of data lines with respect to control lines - is violated.

Do you have a scope to verify signal levels and timing?