It also depends on the audience and medium, with "should've" being more appropriate for conversational/informal usage. It would be perfectly normal to say something like "he shouldn't've done that," but if I were writing a message, I'd at least expand the last contraction to "have."
I think there's a general perception that many of the common dialects of American English, especially in the South and West, are associated with being less educated. I am not sure where that comes from.
I'm a native English speaker, and my perception is that when someone speaks in a way where they don't use contractions, it seems verbose and stilted; I associate it with being scolded or disciplined, or when someone is speaking sternly to make a point (or out of anger). E.g.: "You don't know where you're going, you should've taken a left" - informative/neutral "You do not know where you are going, you should have taken a left" - critical/scolding
Omitting contractions can result in speech that sounds strange and unnatural in general: "Shouldn't we go?" -> "Should not we go?" "Aren't you coming?" -> "Are not you coming?" "We didn't, but we should've." -> "We did not, but we should have."