我的C#程序从用户处获取文本输入并向维基百科创建Web请求以获取建议,然后使用Win32 API函数ListView
函数将建议输出到所有者绘制的ExtTextOut
。 / p>
一些建议以编码方式进行编码:
Abridged Chronicles of \\u0110\\u1ea1i Vi\\u1ec7t
所以我使用System.Text.RegularExpressions.Regex.Unescape
产生这个:
Abridged Chronicles of Đại Việt
虽然上面带有文字越南字符的字符串在TextBox
,RichTextBox
以及Visual Studio调试器中的任何位置呈现正常,但在通过{{1}发送时无法正确呈现}。
以下是它的外观:
我尝试更改ExtTextOut
的{{1}}语句以使用W版本:
DllImport
但是这只是为所有输出渲染了亚洲字符。
我查看了Windows计算机上的语言选项,但这似乎不是纠正问题的正确位置,因为ExtTextOut
可以很好地呈现字符(Visual Studio和我的网站也是如此)浏览维基百科时的浏览器,就此而言。)
我试图转换字符串,如下所示:
[DllImport("gdi32.dll", EntryPoint = "ExtTextOutW")]
public static extern int ExtTextOut(IntPtr hdc, int x, int y, int options,
ref RECT clip, String str, int len, IntPtr spacings);
但是没有做任何事情我并不感到惊讶,因为在.NET中,如果我错了,请纠正我,内存中的字符串总是用UTF-16编码,所以上面的代码确实做到了什么都没有。
如何使用RichTextBox
正确显示字符或者我需要采用不同的方法?
答案 0 :(得分:0)
好吧,看起来解决方案是添加Charset = Charset.Unicode
:
[DllImport("gdi32.dll", CharSet = CharSet.Unicode, EntryPoint = "ExtTextOutW")]
public static extern int ExtTextOut(IntPtr hdc, int x, int y, int options, ref RECT clip,
String str, int len, IntPtr spacings);