字符串:
string strValue = @"||\F2,,\C1,,w||\F1,,博客园||";
首先\F是字体的意思 ;\C是颜色 ;\S字体大小 里面的数字是具体属性的如颜色有红色,绿色 ;字体有12px ,14px ,20px (没有默认添加属性 这些都是自定义的),合起来的意思就是 "w"字体是宋体 颜色是红色 字体大小默认12px。
如最后的结果为
||\F2,,\C1,,\\S1,,w||\\F2,,\C1,,\\S1,,博客园||(逗号是自己字符处理添加的)。
也可以不加的效果是 |\F2\C1\\S1w||\\F2\C1\\S1博客园||不过这个有bug 就是s后面又出现了1就不知道是文字还是\S后面的(|\F2\C1\\S11w||\\F2\C1\\S1博客园||)
问题是?
这个字符串里面的\F \C\S W 是一种码(GBK的16进制) 数字又是另外一种码(16进制)。
不知道大侠看明白了意思没(复制运行一下 估计就明白了)。
附加我的代码 。 ,不知道大侠你们有什么好的方法或者思路。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { string strValue = @"||\F2,,\C1,,w||\F1,,博客园"; string herGBK = ToHexGBKString(strValue); Console.WriteLine(herGBK); } public static string ToHexGBKString(string strContext) { if (string.IsNullOrEmpty(strContext)) return null; StringBuilder sb = new StringBuilder(); string str, temp; string[] tempArr; string[] arrStr = strContext.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < arrStr.Length; i++) { str = "";//这里的意思是如果字符串里面没有\F或者\C或者\S就默认加上 if (arrStr[i].IndexOf("\\C") ==-1) { str += "\\C1,,"; } if (arrStr[i].IndexOf("\\F")==-1) { str += "\\F1,,"; } if (arrStr[i].IndexOf("\\S") ==-1) { str += "\\S1,,"; } arrStr[i] = str + arrStr[i]; tempArr = arrStr[i].Split(new string[] { ",," }, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < tempArr.Length; j++) { temp = ""; if (tempArr[j].IndexOf("\\C") > -1 || tempArr[j].IndexOf("\\F") > -1 || tempArr[j].IndexOf("\\S") > -1) { temp = tempArr[j].Substring(0, 2);//这里取出的是\F;\C;\S byte[] bts = Encoding.GetEncoding("GBK").GetBytes(temp); foreach (var item in bts) { sb.Append(item.ToString("X").PadLeft(2, '0')); }
//这里是\F;\S;\C;后面的数字 temp = tempArr[j].Substring(2); sb.Append(int.Parse(temp).ToString("X").PadLeft(2, '0')); } else {//这个是值如上面的字符串("w"和"博客园") byte[] bts = Encoding.GetEncoding("GBK").GetBytes(tempArr[j]); foreach (var item in bts) { sb.Append(item.ToString("X").PadLeft(2, '0')); } } } } return sb.ToString(); } } }
代码没有问题。求优化或者更好的方法
建立对象啊,对象有几个属性font,color,size,str,然后一一给它们赋值就行了。