字符串:
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();
}
}
}
代码没有问题。求优化或者更好的方法
添加回答
举报
0/150
提交
取消