关于StreamReader读word文件时,读出来的是乱码,如何解决?

时间:2022-04-24 04:25:59
stringbulder FileContent=new stringbulder(); 
StreamReader TxtReader = new StreamReader(readFilePath, System.Text.Encoding.Default);
 FileContent.Append(TxtReader.ReadToEnd());
TxtReader.Close();

读出来的内容是乱码,就算word文件里是数字和英文,读出来的也是乱码.
1、word文件里的编码格式是什么样的?
2、如何解决这一问题?

7 个解决方案

#1


System.Text.Encoding.Default,这个编码格式有问题吧,
System.Text.Encoding.GetEncoding("GB2312")试试

#2


http://www.javaeye.com/topic/191552

#3


up

#4


word2003不是文本格式。
你调word的组建来读word文档阿详细参考以下VSTO

#5


word2003不是文本格式。 
你调word的组建来读word文档阿详细参考以下VSTO?
能具体点吗?

我添加收用后,Microsoft.Vbe.Interop.dll,
还是不行...

#6


首先你要添加word引用 然后这样创建对象 接着就随你操作了
             

            

            object oMissing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Word._Application oWord;
            Microsoft.Office.Interop.Word._Document oDoc;

            oWord = new Microsoft.Office.Interop.Word.Application();
              oDoc = oWord.Documents.open(...)
            

#7


首先添加引用 在Com 里选Microsoft Word 11.0 Object LIbrary。。
导入命名空间:
using Microsoft.Office.Interop.Word;
using System.Reflection;
读的代码:
//获得word文件的文本内容
public string Doc2Text(string docFileName)
{
   //实例化COM
   Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
   object fileobj = docFileName;
   object nullobj = System.Reflection.Missing.Value;
   //打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了)
    Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj
    );
   //取得doc文件中的文本
   string outText = doc.Content.Text;
        
   //关闭文件
   doc.Close(ref nullobj, ref nullobj, ref nullobj);
   //关闭COM
   wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);
   //返回
    return outText;
}



000209FF-0000-0000-C000-000000000046
布暑手机网站时,
出现此问题:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失
解决办法:
1:在服务器上安装office的word软件. 
2:在 "开始 "-> "运行 "中输入dcomcnfg.exe启动 "组件服务 " 
3:依次双击 "组件服务 "-> "计算机 "-> "我的电脑 "-> "DCOM配置 " 
4:在 "DCOM配置 "中找到 "Microsoft   word应用程序 ",在它上面点击右键,然后点击 "属性 ",弹出 "Microsoft   word应用程序属性 "对话框 
5:点击 "标识 "标签,选择 "交互式用户 " 
6:点击 "安全 "标签,在 "启动和激活权限 "上点击 "自定义 ",然后点击对应的 "编辑 "按钮,在弹出的 "安全性 "对话框中填加 
一个 "NETWORK   SERVICE "用户(注意要选择本计算机名),并给它赋予 "本地启动 "和 "本地激活 "权限. 
7:依然是 "安全 "标签,在 "访问权限 "上点击 "自定义 ",然后点击 "编辑 ",在弹出的 "安全性 "对话框中也填加一个 "NETWORK 
SERVICE "用户,然后赋予 "本地访问 "权限. 
这样,我们便配置好了相应的word的DCOM权限. 
注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户 
由于word是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调 
用这个功能的时候再删除以前在服务器上所生成的所有word

#1


System.Text.Encoding.Default,这个编码格式有问题吧,
System.Text.Encoding.GetEncoding("GB2312")试试

#2


http://www.javaeye.com/topic/191552

#3


up

#4


word2003不是文本格式。
你调word的组建来读word文档阿详细参考以下VSTO

#5


word2003不是文本格式。 
你调word的组建来读word文档阿详细参考以下VSTO?
能具体点吗?

我添加收用后,Microsoft.Vbe.Interop.dll,
还是不行...

#6


首先你要添加word引用 然后这样创建对象 接着就随你操作了
             

            

            object oMissing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Word._Application oWord;
            Microsoft.Office.Interop.Word._Document oDoc;

            oWord = new Microsoft.Office.Interop.Word.Application();
              oDoc = oWord.Documents.open(...)
            

#7


首先添加引用 在Com 里选Microsoft Word 11.0 Object LIbrary。。
导入命名空间:
using Microsoft.Office.Interop.Word;
using System.Reflection;
读的代码:
//获得word文件的文本内容
public string Doc2Text(string docFileName)
{
   //实例化COM
   Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
   object fileobj = docFileName;
   object nullobj = System.Reflection.Missing.Value;
   //打开指定文件(不同版本的COM参数个数有差异,一般而言除第一个外都用nullobj就行了)
    Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref fileobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj,
    ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj
    );
   //取得doc文件中的文本
   string outText = doc.Content.Text;
        
   //关闭文件
   doc.Close(ref nullobj, ref nullobj, ref nullobj);
   //关闭COM
   wordApp.Quit(ref nullobj, ref nullobj, ref nullobj);
   //返回
    return outText;
}



000209FF-0000-0000-C000-000000000046
布暑手机网站时,
出现此问题:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失
解决办法:
1:在服务器上安装office的word软件. 
2:在 "开始 "-> "运行 "中输入dcomcnfg.exe启动 "组件服务 " 
3:依次双击 "组件服务 "-> "计算机 "-> "我的电脑 "-> "DCOM配置 " 
4:在 "DCOM配置 "中找到 "Microsoft   word应用程序 ",在它上面点击右键,然后点击 "属性 ",弹出 "Microsoft   word应用程序属性 "对话框 
5:点击 "标识 "标签,选择 "交互式用户 " 
6:点击 "安全 "标签,在 "启动和激活权限 "上点击 "自定义 ",然后点击对应的 "编辑 "按钮,在弹出的 "安全性 "对话框中填加 
一个 "NETWORK   SERVICE "用户(注意要选择本计算机名),并给它赋予 "本地启动 "和 "本地激活 "权限. 
7:依然是 "安全 "标签,在 "访问权限 "上点击 "自定义 ",然后点击 "编辑 ",在弹出的 "安全性 "对话框中也填加一个 "NETWORK 
SERVICE "用户,然后赋予 "本地访问 "权限. 
这样,我们便配置好了相应的word的DCOM权限. 
注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户 
由于word是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调 
用这个功能的时候再删除以前在服务器上所生成的所有word