Получение SurrogatePairs из документов MS Word
Мы написали и приложение, которое откроет документы 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%. Кто-нибудь может направить меня на правильный путь?
1 ответ
Вы можете использовать MS Office Primary Interop Assembly для доступа к объектной модели текстового документа. Попробуйте добавить ссылку на сборку в Visual Studio (например, Office 12 или Microsoft Word 12 и т. Д.). Проверьте эту ссылку. Там есть некоторые основы.