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