如何读取 .doc .docx 的文本内容... - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
aisensiy
V2EX    程序员

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

  •  
  •   aisensiy
    aisensiy 2013-06-05 16:45:36 +08:00 6472 次点击
    这是一个创建于 4589 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自己 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(""));
    System.out.println(text2007);

    我尝试做 的转码,这样似乎不行。
    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
    中文应该都是。以前试过用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     Solana     5481 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:38 PVG 15:38 LAX 23:38 JFK 02:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86