2013年9月29日 星期日

罕見字元 造成亂碼(SQL)


unicode 存進sql會出問題  因為如果資料類型不是nvarchar 會變成不是中文
例如 峯   存進去會變成  峯
所以資料庫建的時候 如果怕有罕見字元 最好都用N開頭的


如果上面的辦法 工程太大 程式碼就要轉碼!
using System.Text.RegularExpressions;
 E_txtEMPERSON.Text = unicode( dt.Rows[0]["EMPERSON"].ToString());

 public string unicode(string str)
    {
        string E_txtEMPERSONtxt = str;
        string patten = @"&#(\d*);"; //樣式比對
        Match m = Regex.Match(E_txtEMPERSONtxt, patten, RegexOptions.Multiline);
        if (m.Success)
        {
            RecursiveNextMatch(m, ref E_txtEMPERSONtxt);
        }
       return E_txtEMPERSONtxt;
    }

    public static void RecursiveNextMatch(Match m, ref string names)
    {
        if (m.Captures.Count > 0)
        {
            if (m.Groups.Count == 2)
            {
                string oldchar = m.Groups[0].Value;
                string unicode = m.Groups[1].Value;
                byte[] b = BitConverter.GetBytes(ushort.Parse(unicode));
                string unicodeStr = Encoding.Unicode.GetString(b);
                names = names.Replace(oldchar, unicodeStr);
            }
            RecursiveNextMatch(m.NextMatch(), ref names);
        }
    }

沒有留言:

張貼留言