繁体   English   中英

Graphics.DrawString中的字符更改

[英]Characters changing in Graphics.DrawString

我有一个用C#编写的dll。 其中一种方法采用参数string txt 该dll是从经典的ASP页面中调用的。 在呼叫时,文本包含字符é ,可通过按住ALT并在数字键盘上键入130或按住ALT-GR并按e来获得

DrawString方法输出错误。 我意识到存在字符集/字体问题,但是我不知道如何解决该问题。

我在英式键盘上使用Arial字体进行的本地化是大写字母A,上方带有波浪号,后跟一个小写的c。

输入文本的个人可以使用任何键盘布局,可以在PC上进行任何本地化,但是他们都将通过我们的网页进行输入。

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

相关的代码位是:

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

由于您的文本字符串来自网页,因此可能是经过URL编码的。 尝试先对其进行解码,并确保结果为UTF8:

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

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

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

U+00C3Ã ,而U+00A9© )。

因此,您显然有一个编码问题,而相关的代码不是您发布的代码,而是从Web请求接收字符串并将其通过页面(代码隐藏?)传递到DLL的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM