0

我有一个用 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);
4

2 回答 2

1

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

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

m_graphics.DrawString(strEncoded, fnt, txtBrush, new Point(200, 200), strFormatter);
于 2013-01-07T13:59:00.683 回答
0

é被编码为U+00E9Unicode,这导致 UTF-8 0xC3 0xA9

U+00C3Ã,并且U+00A9©来源)。

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

于 2013-01-07T11:26:56.103 回答