我在Stack Overflow上搜索了帖子,并阅读了JoelOnSoftware关于编码的帖子,现在对编码问题有了基本的把握.但是我遇到了一些来自Windows剪贴板的字符编码问题.
可重现的测试是使用IE并从Google主页中选择并复制"广告计划"文本.
我正在使用以下C#代码将此文本从剪贴板中删除(错误检查已删除):
uint FormatId = GetRegisteredClipboardFormatId("HTML Format");
IntPtr hHtml = Win32.GetClipboardData(FormatId);
uint DataSize = Win32.GlobalSize(hHtml);
byte[] HtmlData = new byte[DataSize];
IntPtr pData = Win32.GlobalLock(hHtml);
Marshal.Copy(pData, HtmlData, 0, (int)DataSize);
Win32.GlobalUnlock(hHtml);
Run Code Online (Sandbox Code Playgroud)
剪贴板HTML数据应该是UTF-8编码的,所以我使用以下内容将数据转换为字符串:
string Content = Encoding.UTF8.GetString(HtmlData);
Run Code Online (Sandbox Code Playgroud)
但是,忽略周围的HTML标记,结果是:
"广告计划"
我做错了什么,误解了什么,或问题出在其他地方?
谢谢你的帮助!
您正在将UTF-8显示为Latin-1或其变体(CP1252).
Google在该句中使用了一个句子,即C2 A0,恰好是Â 拉丁语-1中的" ".
编辑:你在这里显示的代码是好的.我认为当你显示问题时会出现问题content.看起来你输出的是UTF-8,但是显示媒体正在期待Latin-1.
如果您使用控制台显示,请试试这个,
Console.OutputEncoding = Encoding.GetEncoding("iso-8859-1");
Run Code Online (Sandbox Code Playgroud)
这将告诉控制台发送Latin-1而不是UTF-8.
如果您在浏览器中显示文本,请确保网页标有UTF-8,例如,
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6254 次 |
| 最近记录: |