The limit is 160 characters, or 70 if you use special characters.
By default, a text is sent via 7-bit encoding, which allows you to use 160 characters per text. Most symbols are included in this 7-bit encoding.
However, if you use 1 character that does not appear in the 7-bit encoding, your device will compensate by converting your entire message in 16-bit encoding (or UCS-2). With 16-bit encoding the number of characters in your text will automatically be limited to 70. An example of such a character would be the French à, or smileys.
It is always the device itself deciding which encoding is used. In the older operating systems Symbian (Nokia) and Blackberry you often had the choice to not let this conversion take place. The special characters wouldn't be used and were replaced by similar symbols which were available in 7-bit encoding (e.g. à is replaced by a, ç by c…). Unfortunately, this function is no longer available in more recent operating systems such as Android, iOS.... This is compensated by a counter in the text application indicating how many characters you can still use and/or how many texts you will send.
It is still the device which decides which coding will be used.
What if I want to send a longer text message?
If you want to send a message of more than 160 characters (or more than 70 in case of 16-bit UCS-2), you will need data to link the messages to each other. This reduces the actual number of characters per text to 153 or 67 respectively.