【问题标题】:java hex data in string字符串中的java十六进制数据
【发布时间】: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'之间解析。

标签: java string hex


【解决方案1】:

从您的问题中无法完全清楚您正在搜索的字符串本身是十六进制编码的,还是文件中包含字符值 0xc2 0xa0 的 2 字节序列的普通字符串。

假设后一种情况,在文件中序列0xc2a0 是Unicode 代码点0xA0 的UTF-8 编码,它是对应于HTML 中  实体的不间断空格。

如果文件包含这些两字节序列,那么当读入您的 Java 字符串时(假设您使用 UTF-8 编码来解释字节流),那么这些序列中的每一个都将成为您的单个 0xA0字符串。

您应该能够编写一个正则表达式来查找由这些对分隔的数据。

【讨论】:

  • 尝试搜索\xA0
【解决方案2】:

@Jim Garrison 你的回答让我开始搜索。我还是不懂 UTF-8 编码。你的最后两段是正确的。我猜 PDFBOX 正在使用 UTF-8 来读取 PDF 文件。我使用了以下内容:

private final String TAG = "\u00A0";                    // Tag &nbsp X'C2A0'

在两个 x'C2A0' 标签之间查找和解析数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 2015-04-30
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2019-07-27
    • 2014-07-15
    • 2012-11-20
    相关资源
    最近更新 更多