Graphics.DrawString中的字符更改

时间:2012-12-20 15:22:49

标签: c# asp.net dll

我有一个用C#编写的dll。其中一个方法采用参数string txt。 dll是从经典的asp页面调用的。在调用时,文本包含通过按住 ALT 并在数字键盘上键入130或按住 ALT-GR é >并点击 e

DrawString方法输错了。我发现有一个字符集/字体问题,但我不知道如何解决这个问题。

我在英国键盘上获得的内容和使用Arial字体的本地化是一个大写字母A,其上方有一个波浪号,后面跟一个圆圈中的小写字母C.

输入文字的个人可能正在使用任何键盘布局,可能在他们的电脑上有任何本地化,但他们都会通过我们的网页进入。

我需要做些什么来使事物兼容或转换?

代码的相关位是:

Bitmap image = new Bitmap(strFilePath);

Graphics m_graphics;
m_graphics = Graphics.FromImage(image);

Font fnt = new Font("Arial", 12.0f);

StringFormat strFormatter = new StringFormat();

SolidBrush txtBrush = new SolidBrush(Color.FromArgb(127, Color.FromArgb(int.Parse("AB12CD", NumberStyles.HexNumber))));

m_graphics.DrawString("é", fnt, txtBrush, new Point(200, 200), strFormatter);

2 个答案:

答案 0 :(得分:1)

由于您的文字字符串来自网页,因此可以进行网址编码。 首先尝试解码,并确保结果为UTF8:

string strDecoded = HttpUtility.UrlDecode(strEncoded, Encoding.UTF8)

m_graphics.DrawString(strEncoded, fnt, txtBrush, new Point(200, 200), strFormatter);

答案 1 :(得分:0)

é在Unicode中编码为U+00E9,结果为UTF-8 0xC3 0xA9

U+00C3ÃU+00A9©source)。

所以你明显有一个编码问题,相关代码不是你发布的那个,而是从web请求接收字符串并将其通过页面(代码隐藏?)传递到你的DLL中的代码。 / p>