"Пустой" символ, извлеченный из файла PDF


Недавно я попытался использовать PDFBox для извлечения текста из PDF-файла. Он прекрасно работает для большинства PDF-файлов,но для одного PDF-файла (который, к сожалению, я не могу поделиться) все точки в предложениях не извлекаются. Вместо этого я получаю фразы, подобные следующим:

...what it would be It’ll be important later on...

Похоже, что вместо точки-пространства это просто пространство, но это не так (по крайней мере, на Mac OS X). Если вы скопируете текст в текстовый редактор и начнете перемещать текстовый курсор по фразе, то "пустой символ" сразу после "т"в " ногах". Для воспроизведения:

  • поместите курсор прямо перед буквой " т "в поле" ноги " и нажмите кнопку стрелка вправо. Курсор перемещается на один шаг вправо.
  • нажмите клавишу со стрелкой вправо еще раз, вы остаетесь на месте.
  • нажмите клавишу со стрелкой вправо еще раз, вы продолжите движение к другой стороне пространства.
  • продолжая нажимать клавишу со стрелкой вправо, ведет себя так, как и ожидалось

Похоже, что PDFBox извлечен какой-то" пустой символ " вместо точки. Я пытался заменить его несколькими другими способами, но мне не повезло:

String oldText = text;
text = text.replace('u0000', '.'); //Unicode null
text = text.replace('', '.'); //C null
System.out.println(oldText.equals(text)); //Returns true
//Also tried text.replace(null, '.'), but it doesn't compile

Что это за "пустой символ" и как я могу заменить его текстом, который должен быть там?

EDIT: этот ответ предполагал, что символ может быть символом типа uFEFF, но попытка заменить его регулярным выражением, как предлагалось, не сработала.

1 2

1 ответ:

Поняв, что символ не был \uFEFF или \u0000, двумя значениями unicode, с которыми сталкивались другие пользователи переполнения стека, я решил провести тест, чтобы выяснить, что код на самом деле был. Используя код в этом ответе для определения значения unicode, я выяснил, что таинственный символ был \u0008, который является " backspace". Почему это было вытащено из PDF, я не знаю, но text = text.replace('\u0008', '.') теперь заменяет его отсутствующими периодами.