首页 > 语言 > 关键词   >  gb转utf-8最新资讯  > 正文

php对gb编码动态转utf-8编码的几种方法评测

2008-08-21 11:51 · 稿源:互联网

可见这次是MySQL方法遥遥领先于文件查询法。但是现在还不急于使用MySQL方法,因为文本文件方法之所以如此耗时,主要因为它每次转换都要把整个gb_unicode.txt读入内存,而gb_unicode.txt又是文本文件,格式如下:


0x2121   0x3000   # IDEOGRAPHIC SPACE
0x2122   0x3001   # IDEOGRAPHIC COMMA
0x2123   0x3002   # IDEOGRAPHIC FULL STOP
0x2124   0x30FB   # KATAKANA MIDDLE DOT
0x2125   0x02C9   # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
……
0x552A   0x6458   # <CJK>
0x552B   0x658B   # <CJK>
0x552C   0x5B85   # <CJK>
0x552D   0x7A84   # <CJK>
……
0x777B   0x9F37   # <CJK>
0x777C   0x9F3D   # <CJK>
0x777D   0x9F3E   # <CJK>
0x777E   0x9F44   # <CJK>

文本文件效率较低,于是考虑把文本文件转换为二进制文件,然后用折半法查找这个文件,而不需要把整个文件读入内存。文件格式为:文件头2字节,存储记录数;接着一条接一条记录存入文件,每条记录4字节,前2字节对应GB代码,后2字节对应Unicode代码。转换程序如下:


<?php
$arrLines = file("gb_unicode.txt");
foreach ($arrLines as $strLine) {
  $arrCodeTable[hexdec(substr($strLine, 0, 6))] = hexdec(substr($strLine, 7, 6));
}
ksort($arrCodeTable);
$intCount = count($arrCodeTable);
$strCount = chr($intCount % 256) . chr(floor($intCount / 256));
$fileGBU = fopen("gbu.dat", "wb");
fwrite($fileGBU, $strCount);
foreach ($arrCodeTable as $k => $v) {
  $strData = chr($k % 256) . chr(floor($k / 256)) . chr($v % 256) . chr(floor($v / 256));
  fwrite($fileGBU, $strData);
}
fclose($fileGBU);
?>

执行程序后就获得了二进制的GB->Unicode对照表gbu.dat,并且数据记录按GB代码排了序,便于折半法查找。使用gbu.dat进行转码的函数如下:


function GB2UTF8_FILE1($strGB) {
  if (!trim($strGB)) return $strGB;
  $fileGBU = fopen("gbu.dat", "rb");
  $strBuf = fread($fileGBU, 2);
  $intCount = ord($strBuf{0}) + 256 * ord($strBuf{1});
  $strRet = "";
  $intLen = strlen($strGB);
  for ($i = 0; $i < $intLen; $i++) {
    if (ord($strGB{$i}) > 127) {
        $strCurr = substr($strGB, $i, 2);
        $intGB = hexdec(bin2hex($strCurr)) - 0x8080;
        $intStart = 1;
        $intEnd = $intCount;
        while ($intStart < $intEnd - 1) { // 折半法查找
          $intMid = floor(($intStart + $intEnd) / 2);
          $intOffset = 2 + 4 * ($intMid - 1);
          fseek($fileGBU, $intOffset);
          $strBuf = fread($fileGBU, 2);
          $intCode = ord($strBuf{0}) + 256 * ord($strBuf{1});
          if ($intGB == $intCode) {
            $intStart = $intMid;
            break;
          }
          if ($intGB > $intCode) $intStart = $intMid;
          else $intEnd = $intMid;
        }
        $intOffset = 2 + 4 * ($intStart - 1);
        fseek($fileGBU, $intOffset);
        $strBuf = fread($fileGBU, 2);
        $intCode = ord($strBuf{0}) + 256 * ord($strBuf{1});
        if ($intGB == $intCode) {
          $strBuf = fread($fileGBU, 2);
          $intCodeU = ord($strBuf{0}) + 256 * ord($strBuf{1});
          $strRet .= u2utf8($intCodeU);
        } else {
          $strRet .= "??";
        }
        $i++;
    } else {
        $strRet .= $strGB{$i};
    }
  }
  return $strRet;
}

把其加到原来的测评程序,对三种方法同时测评2次得到数据(精确到3位小数,单位:秒):

MySQL方法:0.125
文本文件方法:10.873
二进制文件折半法:0.106

MySQL方法:0.102
文本文件方法:10.677
二进制文件折半法:0.092

举报

  • 相关推荐
  • 大家在看
  • 曝iPhone17Pro起始存储翻倍 或取消128GB

    苹果即将于2025年发布的iPhone17Pro系列将迎来重大存储升级,入门机型容量从现行的128GB直接提升至256GB,但起售价也将同步上涨50美元至1049美元(约合人民币7500元)。这一调整意味着该系列将彻底取消128GB版本,实现全系256GB起步。 尽管定价较前代128GB机型有所提高,但对比当前256GB版本的iPhone16Pro(售价1099美元),消费者仍能享受50美元的价格优惠。

  • 从构建方法论到服务加码,华为加速释放AI时代制造业数智潜能

    华为提出"三层五阶八步"数字化转型方法论,助力制造业企业应对AI时代挑战。文章指出制造业数字化转型面临技术架构创新、服务体系重构和人才技能升级三大挑战。华为通过重构"规划-建设-运营-迭代"一体化服务体系和"线下+线上"协同模式,已在汽车制造等领域实现研发效率提升30%、排产效率提升20%等显著成效。其核心在于将工业Know-how与AI技术深度融合,通过生态协同释放产业潜能。目前华为已建立覆盖全国2800个区县的服务网络,联合2500家伙伴构建智能制造解决方案。文章强调真正的智造不仅是技术突破,更要让每个产业细胞在变革中焕发新生。

  • 瓴羊Dataphin 智能升级:编码难题一扫光,开发运维更高效!

    Dataphin V5.1.2智能版本推出三大核心功能:1)智能编码助手:通过自然语言交互自动生成SQL代码,支持代码补全和结构化输出,提升开发效率;2)智能运维助手:提供任务状态可视化监控、异常诊断和一键重跑功能,实现全链路运维管理;3)智能分析助手:基于分析专辑构建自然语言查询系统,支持多轮追问和SQL自由编辑,让非技术人员也能快速获取数据洞察。新版本通过AI技术重构数据开发体验,实现"会写、能懂、秒查"的智能化目标,满足从开发到分析的全场景需求。

  • 字节、腾讯、阿里,AI 编码“三国杀”

    大厂正在集火最具PMF(产品市场契合度)价值的赛道——AI编码。 从7月21日开始,字节、腾讯、阿里轮番更新AI编码产品和模型:字节已有的AI编码产品Trae放出Solo版本,加入上下文工程,让平台变得更“聪明”;腾讯则把一整套用来部署产品的工具放到其中,做了个“全栈工程师”;阿里更是发布编程大模型Qwen3-Coder剑指Claude4,直接从模型层下功夫。 在Cursor面向中国市场取消了An

  • 有效解决《战地6》延迟高、进不去、黑屏、卡顿的15种方法

    文章提供了15种解决《战地6》游戏卡顿、延迟和黑屏问题的方法:1.使用迅 游加速器优化网络;2.优先使用有线网络连接;3.关闭后台占用资源的程序;4.更新显卡驱动至最新版本;5.在游戏平台验证并修复游戏文件;6.适当增加系统虚拟内存;7.更换更稳定的公共DNS服务器;8.降低游戏内图形设置;9.为游戏执行文件禁用全屏优化;10.在显卡控制面板中优化设置;11.禁用游戏覆盖�

  • 绝地求生pubg延迟高、跳ping问题严重怎么办?方法全解析

    本文介绍了战术竞技游戏《绝地求生》(PUBG)的网络优化方案。游戏强调团队协作和实时决策,网络稳定性直接影响射击精度和移动流畅度。针对高延迟和网络波动问题,建议:1)使用迅游加速器优化线路;2)检查本地网络环境,重启路由器或更换DNS;3)关闭后台高带宽程序;4)验证游戏文件完整性;5)更新显卡驱动和系统补丁;6)优先使用有线连接。若问题依旧,可尝试更换网络时段或联系网络服务商。建议从基础连接问题开始逐步排查,再针对性调整资源配置。

  • iPhone 18 Pro首发!苹果最强基带曝光

    上个月微软面向商业客户推出了Surface Laptop 5G版本,它支持Nano SIM卡和eSIM两种方式,还可作为热点为其他设备提供网络。在Surface Laptop推出5G之际,苹果也在着手准备5G版Mac设备。 苹果记者Mark Gurman爆料,苹果最快会在2026年在Mac电脑上配备自研5G基带芯片,这将是苹果史上首款支持5G网络的Mac设备。 据悉,2026年的Mac电脑将搭载苹果新一代基带芯片C2,这颗基带由iPhone 18 Pro率先搭

  • AI日报:GPT-5-Auto现身Mac客户端;阿里开源WebAgent项目WebShaper;腾讯推X-Omni多模态模型

    【AI日报】今日AI领域重要动态:1)阿里开源WebAgent项目WebShaper,GAIA评测超越Claude4-Sonnet;2)Moonvalley推出草图转视频功能,支持手绘生成电影级视频;3)腾讯X-Omni模型实现图文理解重大突破;4)百度搜索测试AI应用中心入口;5)Midjourney+新增个性化推荐功能;6)GPT-5或于2025年夏季发布;7)Ollama推出桌面客户端;8)OWL团队开源多智能体协作工具Eigent;9)OpenAI年收入激增至120亿美元;10)英伟达H20芯片因安全风险被约谈;11)万兴科技天幕2.0模型国内排名第四,与华为云共建AI视频实验室。

  • 抖音低价加码酒旅,OTA群战升级

    继外卖补贴热战之后,酒旅也暗潮涌动。 最新消息是,抖音本地生活在暑期将投入亿元级对酒旅做补贴,联合华住、凯悦等酒店集团推出6 折订房优惠,新客专享价等。抵达用户的通道,除品牌酒店集团矩阵号、职人号直播间,还有抖音日历房。 针对酒旅行业的进击行动,抖音是今年的第三个玩家。 在此之前,京东于618 当天打出「三年0佣金」政策吸引酒店入驻,立志重构O

  • iQOO Z10 Turbo+首销战绩公布:为Z10 Turbo Pro的174%

    iQOO品牌正式发布了其全新旗舰机型iQOO Z10Turbo+,并同步开启销售。这款新机以其卓越的性能和超长续航能力迅速吸引了市场关注,官方数据显示,其首销成绩达到了此前Z10Turbo Pro的174%,显示出消费者对其的高度认可。 iQOO Z10Turbo+的核心亮点在于其搭载的8000mAh超大容量电池,这在当前的智能手机市场中极为罕见。该机型不仅配备了天玑9400+旗舰处理器,还配备了旗舰级的LPDDR5X U

这篇文章对你有价值吗?

今日大家都在搜的词: