V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aisensiy
V2EX  ›  程序员

如何读取 .doc .docx 的文本内容...

  •  
  •   aisensiy ·
    aisensiy · 2013-06-05 16:45:36 +08:00 · 6012 次点击
    这是一个创建于 4184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己 search 了一下,找到了 Apache 下的一个项目 POI。尝试了一下,发现中文乱码问题无法解决 T_T。小崩溃。

    主要是 .doc 或者 .docx 里面的编码是神马啊。

    code 在这里 https://gist.github.com/aisensiy/5712530

    希望有经验的同学帮帮忙。

    如果这个方法行不通,不知有没有其他的方式呢。主要是希望在 *nix 平台可以适用。
    第 1 条附言  ·  2013-06-06 09:07:27 +08:00
    POITextExtractor poitex =
    ExtractorFactory.createExtractor(new File(filename));
    String text2007 = new String(poitex.getText().getBytes("GB2312"));
    System.out.println(text2007);

    我尝试做 GB2312 的转码,这样似乎不行。
    13 条回复    1970-01-01 08:00:00 +08:00
    loading
        1
    loading  
       2013-06-05 16:52:21 +08:00
    我还想说win32api呢…
    swulling
        2
    swulling  
       2013-06-05 16:55:24 +08:00
    Nourl
        3
    Nourl  
       2013-06-05 16:58:10 +08:00   ❤️ 2
    思路:
    *.doc *.docx是由几个xml文件拼成的,后缀改成*.zip后打开可以看到这几个xml文件。
    1. 提取xml文件
    2. 脚本xml库读取需要的内容
    homfen
        4
    homfen  
       2013-06-05 16:58:30 +08:00
    用UTF8试试
    lizheming
        5
    lizheming  
       2013-06-05 16:59:51 +08:00   ❤️ 1
    .doc(x)文档不就是一个压缩包么,你把后缀改成.zip解压就好了...东西一应俱全~
    aisensiy
        6
    aisensiy  
    OP
       2013-06-05 17:16:47 +08:00
    @lizheming
    @Nourl

    多谢指点,看到主要内容了。但是,xml 依然一片混乱啊,样式混杂,没有和排版出来的一一对应关系。
    leafgray
        7
    leafgray  
       2013-06-05 19:50:39 +08:00
    extract再自己getbytes转一下干什么呢?
    docx可以用docx4j.... doc主要还是poi... (JAVA)
    Part
        8
    Part  
       2013-06-05 21:04:47 +08:00
    @lizheming 解压了一下,表示没发现有内容文件,只有 _rels/.rels theme [Content_Types].xml
    xiaoxuxu
        9
    xiaoxuxu  
       2013-06-05 21:18:37 +08:00
    中文应该都是GB2312。以前试过用poi转成html,中文是正常的
    lizheming
        10
    lizheming  
       2013-06-05 21:58:13 +08:00
    @Part .doc的好像不是规范的协议,貌似不能单纯解压..原谅我的信口开河吧o(╯□╰)o
    micyng
        11
    micyng  
       2013-06-06 15:22:23 +08:00
    docx有标准协议,直接看协议文档不就好了
    dreampuf
        12
    dreampuf  
       2013-06-06 15:34:27 +08:00
    MS Office 有两种协议 97(H*F)和03(X**F),不要自己解压然后解析,开源最成熟(相对)是Apache POI,例子 http://poi.apache.org/text-extraction.html
    如果是单纯导出文本也可以借鉴基于POI的 tika http://tika.apache.org/

    > The Apache Tika™ toolkit detects and extracts metadata and structured text content from various documents using existing parser libraries.
    Muninn
        13
    Muninn  
       2013-06-06 15:36:01 +08:00
    好勤奋呀,研究这个,我都是直接用库或者Win32 API的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1301 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:32 · PVG 07:32 · LAX 15:32 · JFK 18:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.