Я бы предположил, что first
уже поврежден и корректно рендерится только из-за ошибки транскодирования, скрытой конфигурацией вашей консоли.
Это можно подтвердить, выдав кодовые единицы UTF-16 в строке:
for(c<-first.toCharArray()){print("\\u%04x".format(c.toInt))}
Вероятно, есть более элегантный способ написать это.
Если кодовая точка закодирована правильно, это будет:
U+00e1 á \u00e1
Я ожидаю, что где-то кодированные данные UTF-8 декодируются с использованием декодера MacRoman.
codepoint glyph escaped x-MacRoman info
=======================================================================
U+221a √ \u221a c3, MATHEMATICAL_OPERATORS, MATH_SYMBOL
U+00b0 ° \u00b0 a1, LATIN_1_SUPPLEMENT, OTHER_SYMBOL