0

我们已经编写了一个应用程序,它将打开 Microsoft Word 文档,读取里面的所有文本,然后将这些数据发送到外部系统进行处理。这在过去运行良好,但自从我们接受 Unicode 后,我们在阅读 Word 文档时遇到了一些问题。

我们看到的问题是我们无法显示任何占用多个代码单元的字符,例如(Surrogate Pair)或ā̈(Grapheme Cluster)。当我们尝试显示 时,我们得到两个 ??,而 ā̈,我们得到组成字素的每个单独的字符。

我有一种感觉,我们看到这些字符返回的原因是因为我们没有正确读取文件。但是我一直在寻找,还没有找到解决方案。

我创建了一个只包含一个值的 Word 文档: .

我们在代码中做的第一件事是将文件读入字节数组:

FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);

wordDocument = new byte[fileStream.Length];
fileStream.Read(wordDocument, 0, (int)fileStream.Length);

fileStream.Close();

经过进一步调查,字节数组包含以下值:

{63, 63, 10, 13}, or in hex {0x3f, 0x3f, 0x0d, 0x0a}

通过查找十六进制值,我了解到 0x3f 与 ? 相关,这就解释了为什么我们要返回两个 ??。

然后,当我们尝试将数据转换回字符串时,我们最终得到了两个 ??

textdata = System.Text.Encoding.Unicode.GetString(wordDocument);

我认为问题可能与我们在文档中的阅读方式有关,但我不能 100% 确定。谁能引导我走正确的道路?

4

1 回答 1

0

您可以使用 MS Office Primary Interop Assemblies 访问 word 文档的对象模型。尝试在 Visual Studio 中添加程序集引用(例如 Office 12 或 Microsoft Word 12 等)。看看这个链接。那里有一些基础知识。

于 2012-12-17T17:53:35.887 回答