如何确定剪贴板内容的编码
我有一个第三方应用程序,我需要从中复制文本并将其粘贴到 Visual Studio 中。但是,当我复制 vysvedčenie 等文本并将其粘贴到 Visual Studio 文本编辑器中时,我得到 < em>vysvedèenie。
我敢打赌这是由于其他程序将非 unicode 编码文本放入剪贴板。所以我编写了一个程序来定期检查剪贴板并将文本转换为 unicode,如下所示:
var originalText = Clipboard.GetText(TextDataFormat.Text);
Clipboard.SetText(originalText, TextDataFormat.UnicodeText);
这工作正常,但问题是我如何确定剪贴板中已经有 unicode 编码的文本,这样我就不会尝试转换又来了?
我认为 Clipboard.ContainsText(TextDataFormat.UnicodeText)
可以工作,但这总是返回 true。
I have a 3rd party application from which I need to copy texts and paste it into visual studio. However, when I copy the text like vysvedčenie and paste into Visual Studio text editor, I get vysvedèenie.
I bet it's due to the other program putting non-unicode encoded text into clipboard. So I made a program to periodically check clipboard and convert the text into unicode like this:
var originalText = Clipboard.GetText(TextDataFormat.Text);
Clipboard.SetText(originalText, TextDataFormat.UnicodeText);
This works fine, but the problem is how do I determine I already have a unicode-encoded text in the clipboard so that I don't try to convert it again?
I thought that Clipboard.ContainsText(TextDataFormat.UnicodeText)
would work, but this always returned true.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
Clipboard.GetDataObject()
。
然后您可以调用
GetFormats()
返回的IDataObject
上。Use
Clipboard.GetDataObject()
.Then you can call
GetFormats()
on theIDataObject
returned.另请注意:MSDN 文档中的注释:
Clipboard 类只能在设置为单线程单元 (STA) 模式的线程中使用。要使用此类,请确保您的 Main 方法使用 STAThreadAttribute 属性进行标记。
Also note: Note from MSDN documentation:
The Clipboard class can only be used in threads set to single thread apartment (STA) mode. To use this class, ensure that your Main method is marked with the STAThreadAttribute attribute.