У меня есть следующая строка:
это строка u00c5 с отсутствующей косой чертой перед символами Юникода
Он имеет коды символов Unicode, но все символы обратной косой черты перед «u» отсутствуют. Как правильно напечатать эту строку?
Что я сделал?
Я попытался добавить обратную косую черту перед неполной частью юникода, используя следующий код. Однако "\u$1"
не допускается в replaceAll
.
public String sanitizeUnicodeQuirk(String input) {
try {
// String processedInput = input.replaceAll("[uU]([0123456789abcdefABCDEF]{4})", String.valueOf(Integer.parseInt("$1", 16))); // $1 is taken literally which makes valuOf and parseInt useless
String processedInput = input.replaceAll("[uU]([0123456789abcdefABCDEF]{4})", "\\\\u$1"); // Cannot make "\u$1"
String newInput = new String(processedInput.getBytes(), "UTF-8");
return newInput;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return input;
}
"u00c5".replaceAll("([uU][0123456789abcdefABCDEF]{4})", "\\\\$1")
дает вам\u00c5
в чем проблема? Вам просто нужно удалитьu
во втором аргументе метода replaceAll. - person alain.janinm   schedule 27.01.2017input
представляет собой строку, которая была прочитана из файла, и эта строка в точности равна Å. Это все равно останется строкой из шести символов Å, а не станет строкой из одного символа с соответствующим символом Юникода. Управляющие последовательности Unicode обрабатываются только во время компиляции и только в том случае, если строка была указана как строковый литерал в исходном коде. - person Alderath   schedule 27.01.2017