2010-01-22 63 views
1

我有一個C#應用程序,其中存儲了用戶正確匹配正常特定字符串時要顯示的Unicode字符的代碼點值。在c中的Unicode渲染#

問題是,當我直接存儲代碼點值(比如\ uFB80)時,應用程序工作正常。但是當我從一個只有代碼點的文件或變量(在本例中爲FB80)讀取數據時,我得到了很多錯誤渲染的字符。將存儲的值更改爲\ uFB80或試圖在值的前面添加「\ u」都會導致系統將其讀爲\ uFB80,從而導致另一個錯誤結果。

這是怎麼回事?

XmlTextReader reader = new XmlTextReader("file.xml"); 
reader.Read(); 
reader.MoveToAttribute("glyph"); 

glyph = reader.Value; 
// glyph will be "FB80" 
// if xml file had "\uFB80", glyph will be "\\uFB80" 

richTextBox1.SelectionFont = "QCF_P604"; 
richTextBox1.AppendText(glyph); 
+0

可以顯示你是如何讀取和存儲,顯示的價值? – 2010-01-22 05:17:50

+1

請編輯您的問題並將您的代碼添加到它。評論中很難閱讀。 – 2010-01-23 17:09:29

回答

0

親愛的塔拉巴尼,我underestand你有一個字符串(文件或在一個文本框)時,從包裝盒中一切順利,但是當你試圖從你面對一個文件中讀取您解析字符串問題。

你有一個XML文件,你有strore字符雕文。並且這個XML的每個元素(例如:Item)都有一些像Glyph一樣的屬性。 (字符的形狀)

如果你只想顯示字符的形狀你是嚴重錯誤的方式。你應該做的唯一事情就是寫一個簡單的方法,給出一個十進制(或十六進制)的字符值並返回字符。

返回的字符會作爲單個字符到處顯示。所以我強烈建議你改變方法(這會加快你的應用程序)。

// het a hex and return char (you can give it a large string or a single hexcode 
// (hex without U just HexCode) 
public static char ConvertHexToUnicode(string hexCode) 
    { 
     if (hexCode != string.Empty) 
      return ((char)int.Parse(hexCode, NumberStyles.AllowHexSpecifier)); 

     char empty = new char(); 
     return empty; 
    }//end 

和十進制值使用下面的代碼

public static char ConvertDecimalToChar(Int64 decimalValue) 
    { 
     return ((char)int.Parse(decimalValue.ToString(), NumberStyles.Integer)); 
    } 
+0

我使用了十六進制版本,它像一個魅力工作!非常感謝納賽爾。 – 2010-01-25 17:35:20