When the /say command is used, the player name will be surrounded by square brackets. Chat messages sent without using a command are surrounded by angle brackets.
Comments 3
Why? It's inconsistent and doesn't really serve any purpose. It also makes it impossible to use "/execute say" the way you'd expect, you have to use /tellraw instead if you want to simulate chat messages.
That's how it is intended to be.