Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Graphics.DrawString中的字符更改_C#_Asp.net_Dll - Fatal编程技术网

C# Graphics.DrawString中的字符更改

C# Graphics.DrawString中的字符更改,c#,asp.net,dll,C#,Asp.net,Dll,我有一个用C#编写的dll。其中一个方法采用参数string txt。正在从经典asp页面调用dll。调用时,文本包含字符é,该字符通过按住ALT键并在数字键盘上键入130或按住ALT-GR键并点击e获得 该方法输出错误。我意识到存在字符集/字体问题,但我不知道如何解决这个问题 我在英国键盘上看到的是大写字母a,上面有一个波浪号,后面是一个圆圈中的小写字母c 输入文本的个人可能使用任何键盘布局,可能在其PC上有任何本地化,但他们都将通过我们的网页输入文本 我需要做什么才能使事物兼容或转换 相关代

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

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

我在英国键盘上看到的是大写字母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);

é
以Unicode编码,这导致UTF-8
0xC3 0xA9

U+00C3
Ã
U+00A9
()


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

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

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

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

您好,您可以展示您得到的输出,以及调用draw string的实际代码片段吗。如果没有这些信息,您的问题可能会被关闭。这听起来像是编码问题……我已经添加了相关的代码和我获得的输出。那么如何将传递的字符串从一种编码更改为另一种编码呢。该网站正在使用utf-8。如何找出dll使用的是什么?或者更好的是,如何设置它?HttpUtility所在的命名空间在dllBut Uri中不可用。UnescapeDataString可用,这就解决了问题