剪贴板数据集CF_TEXT无法正确检索为CF_UNICODETEXT

我们的应用程序在非Unicode版本中有一个错误; 如果我们复制一些俄罗斯字符到剪贴板(使用SetClipboardData(CF_TEXT)),然后将它们粘贴到记事本中,它们不会被粘贴为俄语字符,而是作为代码页1252等价物(例如Ý变成Ý)。

在试图弄清楚,我做了一个小testing应用程序粘贴,它工作正常,如果我使用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

它说:“把剪贴板上的转换格式放在一起是没有好处的。”

如果那是真的,那么我必须(我希望)会犯一个容易纠正的简单错误。

任何人都可以帮我解决这个问题? 谢谢

你可能错过了俄罗斯的CF_LOCALE ? 除非另外指定,否则使用系统区域设置来解释CF_TEXT 。 如果您的系统语言环境字符集是CP1252,但是您的应用程序语言环境是CP1251,那么Windows在将您的8位文本转换为Unicode时将会误判。