Как узнать, какой кодовый файл использовать при преобразовании Hex-литералов RTF в Unicode

StackOverflow https://stackoverflow.com/questions/3787837

Вопрос

Я разбираю файлы RTF 1.5+, сгенерированные Word 2003+, которые могут иметь контент с других языков. Этот контент обычно закодирован как шестнадцатеричные литералы ( 'xx). Я хотел бы преобразовать эти литералы в значения Unicode.

Я знаю кодовую страницу своего документа, искал Ansicpg ( ansi ansicpg1252).

Когда я использую код Ansicpg для декодирования к Unicode, многие языки (например, французские), кажется, преобразуют значения, которые я ожидаю.

Однако когда я вижу русский текст (например, ниже), Codeepage 1252 декодирует содержание для дрожания.

f277 lang1049 langfe1033 langnp1049 insrsid5989826 insrsid5989826 sharrsid6817286 'd1 ' f2 'f0 ' e0 '' e8 'f6 ' fb 'E1 ' E5 'E7 ' E1 'E5 ' E7 'ed ' E0 'E7 ' E2 'E0 ' Ed 'E8 ' FF. 'DD ' F2 'E0 ' F1 'F2 ' F0 'E0 ' ED 'E8 ' F6 'E0 ' ED 'E5 ' E4 'EE ' EB ' E6 'ED ' E0 'EE ' F2 'EE ' E1 'F0 ' E0 'E6 ' E0 'FF ' FC 'F1 ' FF 'E2 ' f2 'E0 ' E1 'EB ' E8 'F6 ' E5 'E2 ' F1 'E ' E4 'E5 ' F0 'E6 ' E0 'Ed ' E8 'E8 Отказ

Я предполагаю, что lang1049, langfe1033, langnp1049 должен предоставить мне подсказки, чтобы я мог программно выбрать разные (не по умолчанию) кодовая страница для текста, которую они ссылаются? Если это так, где я могу найти информацию, которая объясняет, как сопоставить lang * код к кодомую странице? Или я должен искать какую-то другую команду / директиву RTF, чтобы предоставить мне информацию, которую я ищу? (Или я должен использовать f277 в качестве ссылки на шрифт и посмотреть, имеет ли у него связанный код?)

Это было полезно?

Решение

\lang Действительно относится только к определенному растяжкам текста как на определенном языке, и не должен влиять на то, какую кодовую страницу будет использоваться для старого неикода \' побеги.

Положить внутрь \ansicpg токен в заголовке, возможно, должен сделать это, но, похоже, игнорируется словом (как для необработанных байтов, так и для \' побеги.

Или я должен использовать F277 в качестве ссылки на шрифт и посмотреть, имеет ли у него связанный код?

Это выглядит так. Изменение \fcharset Из шрифта, назначенного для конкретного участка текста - это единственный способ получить слово, чтобы изменить, как он относится к байтам, в любом случае. Коды в этом токене (см., Например, здесь Для списка) есть, усугубляя, снова отличайтесь от идентификатора языка, либо номера страницы кода.

Другие советы

Не очень ясно, но вы можете использовать контроль Richedit, чтобы преобразовать формат RTF в UTF-8 в соответствии с MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/bb774304(v=vs.85).aspx.Посмотрите на SF_USECODEPAGE для сообщения Em_streamout.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top