设为首页
加入收藏
站内地图
旧版入口
当前位置:首页 > 站长学院 > 网络编程 > ASP.NET

Regex对Unicode的支持和Unicode的BOM

作者:佚名 出处:网络转载 时间:07-06 点击:

内容载入中...
华腾联合陪你一路学习 rosibo 我们知道正则式可以用\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顺序。

看到得去补补编码知识了。
收藏本文:
】【打印页面】【推荐给朋友】【关闭窗口

站长学院

推荐信息