我们的应用程序在非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时将会误判。