如上,我在打开网页源码时,发现有很多都是这类形式的
&#开始的编码,
1.格之类的是什么编码形式?是union形式吗?
2.如何转换。
当然从union格式转换成utf8格式我还是了解的的,从utf8格式转换成gb2312则也是有认识的。
问题是像这类以&#之类是啥意思?从网上搜索到php的一个转换代码。<?php
$str = "TTL全天候自动聚焦";
$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是把天节些出来,
其中这些数值是表示十进制的union吗?求证中。
&#开始的编码,
1.格之类的是什么编码形式?是union形式吗?
2.如何转换。
当然从union格式转换成utf8格式我还是了解的的,从utf8格式转换成gb2312则也是有认识的。
问题是像这类以&#之类是啥意思?从网上搜索到php的一个转换代码。<?php
$str = "TTL全天候自动聚焦";
$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是把天节些出来,
其中这些数值是表示十进制的union吗?求证中。
以&#起始的的确是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全天候自动聚焦";
一个串提取出unicode,则是个麻烦活。