【问题标题】:Retrieving SurrogatePairs from MS Word Documents从 MS Word 文档中检索 SurrogatePairs
【发布时间】:2012-12-17 17:15:05
【问题描述】:

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

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

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

我创建了一个只包含一个值的 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% 确定。谁能指导我正确的道路?

【问题讨论】:

  • Word 文档不是纯文本。
  • 对,当我拿回那双时我的想法是什么??而不是代理对。问题是,如何正确地从 Word 文档中获取所有数据?
  • 您需要为 Word 文件格式(.doc 或 .docx)编写解析器。这并不容易。

标签: c# unicode surrogate-pairs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2012-09-20
    • 1970-01-01
    • 2010-12-21
    • 2020-09-29
    • 1970-01-01
    • 2011-07-29
    • 2010-10-12
    相关资源
    最近更新 更多