如何使越南字符

时间:2017-09-10 01:25:49

标签: c# character-encoding

我的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

虽然上面带有文字越南字符的字符串在TextBoxRichTextBox以及Visual Studio调试器中的任何位置呈现正常,但在通过{{1}发送时无法正确呈现}。

以下是它的外观:

enter image description here

我尝试更改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正确显示字符或者我需要采用不同的方法?

1 个答案:

答案 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);