Android Tess-Two OCR unmappable character 'fi'
В моем приложении Android есть функция OCR, использующая библиотеку tess-two. У меня есть эта проблема при чтении строки, содержащей "fi" . После baseApi.getUTF8Text(), метод получения распознанного текста OCR, возвращаемая строка в "fi" равна "fi" < < < - - - Обращайте пристальное внимание на эту строку. Это не 2-символьная строка, а односимвольная строка. Вы можете воспроизвести это путем копирования и вставки. Теперь я думаю, что это может быть проблема кодировки UTF8 или и т.д., С которыми у меня недостаточно знаний. Когда я пытался сделать string.replace( "fi" , "fi" ), Android Studio строит с помощью erors unmappable character для кодирования utf-8. Я пробовал искать в google, но он распознал его как обычный "fi" , а не "fi" .
Есть ли способ исправить этот символ?
Ответы
Ответ 1
Вы можете избежать распознавания лигатуры fi
путем внесения в нее черного списка перед вызовом baseApi.setImage
:
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "fi");
Чтобы запретить Android Studio выбрасывать ошибку unmappable character
в вашем java-коде, конвертировать кодировку вашего файла в UTF-8 с помощью выбора "UTF-8" из селектор в правом нижнем углу окна Android Studio.
Ответ 2
Вот что я нашел, FWIW: персонаж 'fi' является лигатурой (более на: Unicode Character 'LATIN SMALL LIGATURE FI' (U + FB01))
Вот быстрая и грязная программа для поиска и замены "fi" любыми другими символами:
public class LigatureFI
{
static char ligature_fi = 0xFB01;
public static void main(String[] args)
{
String sligature_fi = Character.toString(ligature_fi);
String string = new String("fififififififififififififififi");
System.out.println(string);
string = string.replaceAll(sligature_fi, "FI");
System.out.println(string);
}
}
Если ваша IDE жалуется, что "fi" не находится в кодировке cp1252, сохраните ее как UTF8.
НТН.