Regex对Unicode的支持和Unicode的BOM
我们知道正则式可以用\uxxxx来表示Unicode编码,比如用[\u4e00-\u9fa5] 来表示双字节字符。
博客园有位朋友留言问我Regex怎么支持Unicode,于是我想取出一个汉字的Unicode编码,写到Regex 的Pattern中,来说明这个问题。
string s = "中";
byte[] bs = Encoding.Unicode.GetBytes(s);
for(int i = 0 ; i < bs.Length ;i++)
{
Console.Write(bs[i].ToString("X"));
}
返回的结果是2D4E,
然后我写正则式来匹配它
string s = "中";
Regex reg = new Regex(@"\u2d4e",RegexOptions.Compiled);
WL(reg.IsMatch(s));
结果却返回False!!
想了半天,记起Unicode的字节存放有前高后低(前一字节放高位后一字节放低位)和前低后高两种,于是把字节前后对换
string s = "中";
Regex reg = new Regex(@"\u4e2d",RegexOptions.Compiled);
WL(reg.IsMatch(s));
此时,返回的是希望看到的True。
后来通过查看
Encoding unicode = Encoding.Unicode;

// Get the byte order mark (BOM) of the Unicode encoder.
byte[] preamble = unicode.GetPreamble();

if(preamble[0] == 0xFE && preamble[1] == 0xFF)
{
Console.WriteLine("The Unicode encoder is encoding in big-endian order.");
}
else if(preamble[0] == 0xFF && preamble[1] == 0xFE)
{
Console.WriteLine("The Unicode encoder is encoding in little-endian order.");
}
得知.NET下的Unicode编码默认采用little-endian顺序。
看到得去补补编码知识了。
博客园有位朋友留言问我Regex怎么支持Unicode,于是我想取出一个汉字的Unicode编码,写到Regex 的Pattern中,来说明这个问题。






返回的结果是2D4E,
然后我写正则式来匹配它



想了半天,记起Unicode的字节存放有前高后低(前一字节放高位后一字节放低位)和前低后高两种,于是把字节前后对换



后来通过查看













看到得去补补编码知识了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步