Данные буфера обмена, установленные как CF_TEXT, не могут быть правильно получены как CF_UNICODETEXT - PullRequest
3 голосов
/ 20 сентября 2011

В нашем приложении есть ошибка в не-юникодной версии; если мы скопируем некоторые русские символы в буфер обмена (используя SetClipboardData (CF_TEXT)), а затем вставим их в блокнот, они будут вставлены не как русские символы, а как кодовая страница 1252 эквивалента (например, Э становится Ý).

Пытаясь понять это, я сделал небольшое тестовое приложение для вставки, и оно работало нормально, если я использовал GetClipboardData (CF_TEXT). однако, если я использую GetClipboardData (CF_UNICODETEXT), у него точно такая же проблема, как и у блокнота.

Так что я предполагаю, что в блокноте просто используется CF_UNICODETEXT для вставки. Согласно прочитанной мною документации MS, буфер обмена должен иметь возможность конвертировать текст CF_TEXT в текст CF_UNICODE. На самом деле на странице:

http://msdn.microsoft.com/en-us/library/ms649013.aspx#_win32_Synthesized_Clipboard_Formats

там написано, что "размещение формата (ов) преобразования в буфере обмена не дает никаких преимуществ".

Если это правда, тогда я должен (я надеюсь) совершить простую ошибку, которую легко исправить.

Может кто-нибудь помочь мне с решением этой проблемы? Спасибо

1 Ответ

6 голосов
/ 20 сентября 2011

Вам, наверное, не хватает CF_LOCALE для русского?CF_TEXT интерпретируется с использованием языкового стандарта системы, если не указано иное.Если для вашей системной локали используется кодировка CP1252, а для локали приложения - CP1251, то при преобразовании вашего 8-битного текста в Unicode Windows будет ошибочно угадывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...