Автоматическое форматирование строки Unicode в Java
-
07-07-2019 - |
Вопрос
Я только что наткнулся на что-то вроде этого:
String sample = "somejunk+%3cfoobar%3e+morestuff";
Распечатанный образец выглядит следующим образом:
какой-то придурок+
<foobar
>+больше всего
Как это работает?U + 003c и U + 003e - это коды Unicode для знаков меньше и больше соответственно, что кажется более чем совпадением, но я никогда не слышал, чтобы Java автоматически делала что-то подобное.Я полагал, что это будет легко сделать в Google, но оказалось, что Google не любит знак процента.
Решение
Вы можете сделать что-то вроде этого,
String sample = "somejunk+%3cfoobar%3e+morestuff";
String result = URLDecoder.decode(sample.replaceAll("\\+", "%2B"), "UTF8");
Другие советы
Эта строка, вероятно, URL-адрес в кодировке Вы бы расшифровали это на java, используя URLДекодер
String res = java.net.URLDecoder.decode(sample, "UTF8");
Java поддерживает экранирование Unicode в char
и String
литералы, но не кодировка URL.
Экранирование в Юникоде использует '\uXXXX'
, где XXXX - это точка Юникода в шестнадцатеричном формате.
Любопытный лакомый кусочек:Грамматика позволяет 'u'
происходить несколько раз, так что '\uuuuuuuu0041'
является допустимым экранированием в Юникоде (для 'A'
).