【发布时间】:2016-11-27 20:51:51
【问题描述】:
我在 JAVA 中使用 PDFBOX 阅读了一个 PDF 文件,并将数据转换为文本并保存在字符串中。我发现很多文本数据都被X'C2A0'包围了。例如:
X'436C756233AC2A04469616D6F6E64C2A0' Club:__Diamond__
__ 是 X'C2A0'
我想搜索“Club:__”,然后在 2 __ 之间解析“Diamond”。我尝试过类似的方法:
String TAG = "\\xC2A0"; // Tag in PDF
int pos = text.indexOf(TAG, positionInText);
但我从来没有得到任何点击。如何指定标签?
编辑:
也许需要澄清一下。我这样使用 PDFBOX:
public void toText() throws IOException
{
this.pdfStripper = null;
this.pdDoc = null;
this.cosDoc = null;
file = new File(filePath);
parser = new PDFParser(new RandomAccessFile(file,"r")); // update for PDFBox V 2.0
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
pdDoc.getNumberOfPages();
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(10);
// reading text from page 1 to 10
// if you want to get text from full pdf file use this code
// pdfStripper.setEndPage(pdDoc.getNumberOfPages());
text = pdfStripper.getText(pdDoc);
文本是定义为字符串的字段。这个文本字符串是我试图解析的。
【问题讨论】:
-
令人困惑的问题。
\\xC2A0是什么?你能发布一个实际的例子吗? -
为什么不 TAG="Club" ?
-
十六进制错误,
33应该只有一个3。如果将十六进制转换为字节,然后使用 UTF-8 解码,则会得到Club:_Diamond_,其中两个下划线是C2A0(UTF-8),也就是 'NO-BREAK SPACE' (U+00A0)。它是单个 NBSP 字符 (A0) 的 2 字节 UTF-8 编码。 -
是文字上方的字符串.. 即字符串数据 = "X'436C756233AC2A04469616D6F6E64C2A0'"... 还是来自 hexdump / 调试器工具?
-
@Andreas one 3 是正确的,我的错误,未输入。你所说的一切听起来都是正确的。我如何为此编码我的 TAG?字符串数据是从 hexdump 中手动输入的。我可以搜索“俱乐部”,但主要是我想在两个x'C2A0'之间解析。