无法像CF_UNICODETEXT一样正确检索设置为CF_TEXT的剪贴板数据

时间:2011-09-20 12:37:26

标签: windows unicode character-encoding internationalization clipboard

我们的应用程序在非unicode版本中有一个错误;如果我们将一些俄罗斯字符复制到剪贴板(使用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 个答案:

答案 0 :(得分:6)

你可能错过了俄语的CF_LOCALE?除非另有说明,否则使用系统区域设置解释CF_TEXT。如果您的系统区域设置字符集是CP1252,但您的应用程序区域设置是CP1251,那么当您将8位文本转换为Unicode时,Windows将会误猜。