簡體   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