如上,我在打开网页源码时,发现有很多都是这类形式的
&#开始的编码,
1.&#26684之类的是什么编码形式?是union形式吗?
2.如何转换。
  当然从union格式转换成utf8格式我还是了解的的,从utf8格式转换成gb2312则也是有认识的。
问题是像这类以&#之类是啥意思?从网上搜索到php的一个转换代码。<?php
$str = "TTL&#20840;&#22825;&#20505;&#33258;&#21160;&#32858;&#28966;";
$str = preg_replace("|&#([0-9]{1,5});|", "\".u2utf82gb(\\1).\"", $str);
$str = "\$str=\"$str\";";
eval($str);
echo $str;
function u2utf82gb($c){
    $str="";
    if ($c < 0x80) {
         $str.=$c;
    } else if ($c < 0x800) {
         $str.=chr(0xC0 | $c>>6);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x10000) {
         $str.=chr(0xE0 | $c>>12);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x200000) {
         $str.=chr(0xF0 | $c>>18);
         $str.=chr(0x80 | $c>>12 & 0x3F);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    }
    return iconv('UTF-8', 'GB2312', $str);
}
?>
由于对php有点不熟,其中函数u2utf82gb就是从union到utf8到gb2312,那么,replace是把&#22825节些出来,
其中这些数值是表示十进制的union吗?求证中。

解决方案 »

  1.   

    自答吧。 研究了一下。
     以&#起始的的确是unicode编码,每个&#间隔开的都是一个unicode字符。
      在delphi中,需要和php一样,提取&#的每个数字, 由于这个数字就是unicode的
    十进制表达,所以只需要把unicode转换成string即可。
    在delphi中实现这种转换非常简单。做了一个测试如下如下:var
      ichr :integer;
      swchar :widestring;
    begin
      ichr := strtoint(edit1.text);
      swchar := widechar(ichr);
      Edit1.Text :=  WideCharToString(pwidechar(swchar));//widechar(ichr));
    end;其中把20840放在edit1中,出来就是‘全’。
    问题是要把类似的"TTL&#20840;&#22825;&#20505;&#33258;&#21160;&#32858;&#28966;"; 
    一个串提取出unicode,则是个麻烦活。