iconv的支持那些字符集之间的转换?
支持主流的字符集之间的转换如何添加字符集使其支持相应的字符编码?
不知道,这需要重新编译iconv函数如果不通过iconv函数,而是希望通过建立字符映射表的方式进行转换的话,我想问一下如何建立 Unicode 和 GB18030之间的映射表?
我国的汉字编码标准自1980年公布的gb2312以后,历经gbk到正式的gb18030。当然还要继续扩展
我国的汉字编码标准在世界编码标准集中编号为Code Page 936简称CP936
在网上搜索cp936就可以找到编码标准的文本和图谱,其中包含对应的unicode编码
于是,构造映射表可从编码标准中提取需要的信息
另外,在支持iconv的环境中只需一个双重循环就可以产生映射表了。何乐而不为呢?

解决方案 »

  1.   

    "在支持iconv的环境中只需一个双重循环就可以产生映射表"?
    我已经用此函数生成了GBK TO Unicode的码表(依据gbk的编码范围例如双字节高位为0x80~0xFE);
    反过来这个循环就不知道该怎么写了,因为不知道Unicode的标准中有那些编码字符是收录于gb18030是中的?
      

  2.   

    参考
      function gen_unicode_gbk() {
             $fp = fopen(DICT_PATH.'unicode_gbk.txt', 'rb+');
    for($i=0x80; $i<0xfe; $i++) {
    for($j=0x40; $j<0xfe; $j++) {
    $ch = chr($i).chr($j);
    $un = iconv('gbk', 'ucs-2', $ch);
    $x = hexdec(bin2hex($un));
    if($x>40869 || $x<19968) {
    $ar[$un] = $ch;
    }else {
    $offs = ($x-19968)*2;
    fseek($fp, $offs);
    fwrite($fp, $ch);
    }
    }
    }
    $offs = (40870-19968)*2;
    fseek($fp, $offs);
    ksort($ar);
    foreach($ar as $k=>$v) {
    fwrite($fp, $k.$v);
    }
    fclose($fp);
      }
      

  3.   

    在Unicode标准中,0x4e00(19968)-0x9fa6(40870)为CKJ Unified Ideographs.我已经用该函数成功的生成相应的对照表。3KS XZ.
        我还有些不明白的地方:
        1.0x4e00(19968)-0x9fa6(40870)包含了全部的GBK或是GB18030汉字吗?
        2.关于中文标点的问题,用紫光的拼音打出来的逗号(",") 其编码为0xa3ac。(紫光选择的是GBK字符集)0xa3ac似乎并不在0x4e00-0x9fa6当中,那应该怎么样处理才更全面?或者说有没有GBK或是GB18030的官方网页发布相关的信息?(我发现一个网页是www.gb18030.org,但上面似乎没什么有用的信息,页面我认为最重要的链接,竟然无效)。
      

  4.   

    1、对照表与查询方式有关。注意我的函数生成的对照表是分段的,分别使用计算偏移和顺序查找两种方式。目的是为了减少对照表文件的尺寸
    2、0x4e00(19968)-0x9fa6(40870)包含了全部的GBK或是GB18030汉字吗?
    不是!你从我的函数中就可看出。
    小于0x4e00和大于0x9fa6的部分因为不连续,被单独处理了
    3、"," 的gb2312编码为0xa3ac,unicode编码为0xff0c