unicode及gbk相关资源

1、UTF-8 and Unicode FAQ
这篇文章说明了在 POSIX 系统 (Linux,Unix) 上使用 Unicode/UTF-8 所需要的信息. 在将来不远的几年里, Unicode 已经很接近于取代 ASCII 与 Latin-1 编码的位置了. 它不仅允许你处理处理事实上存在于地球上的任何语言文字, 而且提供了一个全面的数学与技术符号集, 因此可以简化科学信息交换.
UTF-8 编码提供了一种简便而向后兼容的方法, 使得那种完全围绕 ASCII 设计的操作系统, 比如 Unix, 也可以使用 Unicode. UTF-8 就是 Unix, Linux 已经类似的系统使用 Unicode 的方式. 现在是你了解它的时候了

2、GBK编码
中文字符编码简介 GB2312/GBK/GB18030/BIG5

3、杂文
1) 网页编码utf8与gb2312的区别
2) UTF-8 , GBK , GB2312 编码规则与检测
3) 常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、unicode、UTF-8

4、网页form提交(stone同学的文章)
http://www.blogjava.net/emu/articles/31756.html


5、Linux Unicode 编程
如何在linux程序中加入并使用 Unicode 以实现外语支持

6、UTF-8与GB2312之间的互换(windows)
相信一定有不少的程序开发人员时常会遇到字符编码的问题,而这个问题也是非常让人头痛的。因为这些都是潜在的错误,要找出这些错误也得要有这方面的开发经验才行。特别是在处理xml文档时,该问题的出现就更加的频繁了,有一次用java写服务器端程序,用vc写客户端与之交互。交互的协议都是用xml写的。结果在通讯时老是发现数据接受不正确。纳闷!于是用抓取网络数据包工具抓取数据,后来才发现原来是java上xml的头是这样的<?xml version="1.0" encoding="UTF-8"?>,而vc上默认的是GB2312。所以一遇到汉字数据就不正确了。去网上找资料,这方面的文章好象特别少,针对像这样的问题,下面我介绍一下我自己写的一个转换程序。当然,程序很简单。如果有画蛇添足的地方,还望各位高手一笑了之。

7、convert gb2312 to utf-8(linux命令行)
一直想把自己的 Linux box 从 zh_CN.GB2312 的 locale 设置迁移到 zh_CN.UTF-8 上
去,无奈之前的大量的实验中用到的文件都是 GB2312 编码的,所以,这个迁移直到最
近因为要在一个工具上添加 UTF-8 编码的中文支持才得以完成。以下是我在这个迁移的
过程碰到的一些和中文相关的问题以及我个人的解决方法,列此一来备忘,二来希望能
给有相同需求的朋友做个参考。
提醒:以下提及的工具中的大部分会对你的原始文件进行”写”操作,也就是说, 转换出
来的结果可能会产生错误或者偏差。如果你不是一个有经验的 Linux 用户,请在做这些
操作的时候,注意先做好备份。并强烈建议你在使用某一个工具之 前,先仔细阅读该工
具的 manual。(”man program-name”)

8、用PHP转换编码 — 将 UTF-8 转换为 GB2312
在处理PHP程序时,常常会遇到编码的问题.特别是处理RSS或者一些XML文件. 一般这些文件的编码都是UTF-8的,但是很多网站要求的编码是GB2312的. 要使UTF-8的文件正常显示 , 这个问题常常使人很头疼.
php-mbstring 模块的 mb_convert_encoding() 函数提供了转换character encoding 的功能,但是并不提供 转换成GB2312编码的功能.
不过下面的函数提供了这个功能

9、《Windows核心编程》第二章---window下的Unicode编程
随着M i c r o s o f t公司的Wi n d o w s操作系统在全世界日益广泛的流行,对于软件开发人员来说,
将目标瞄准国际上的各个不同市场,已经成为一个越来越重要的问题。美国的软件版本比国际
版本提前6个月推向市场,这曾经是个司空见惯的现象。但是,由于各国对Wi n d o w s操作系统
提供了越来越多的支持,因此就更加容易为国际市场生产各种应用软件,从而缩短了软件的美
国版本与国际版本推出的时间间隔。
Wi n d o w s操作系统始终不逾地提供各种支持,以帮助软件开发人员进行应用程序的本地化
工作。应用软件可以从各种不同的函数中获得特定国家的信息,并可观察控制面板的设置,以
确定用户的首选项。Wi n d o w s甚至支持不同的字体,以适应应用的需要。
之所以将这一章放在本书的开头,是因为考虑到U n i c o d e是开发任何应用程序时要采用的
基本步骤。本书的每一章中几乎都要讲到关于U n i c o d e的问题,而且书中给出的所有示例应用
程序都是“用U n i c o d e实现的”。如果你为Microsoft Windows 2000或Microsoft Windows CE开发
应用程序,你应该使用U n i c o d e进行开发。如果你为Microsoft Windows 98开发应用程序,你必
须对某些问题作出决定。本章也要讲述Windows 98的有关问题。




10、linux下 c编程
在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。  
  一、利用iconv函数族进行编码转换  
  iconv函数族的头文件是iconv.h,使用前需包含之。  
  #include   <iconv.h>  
  iconv函数族有三个函数,原型如下:  
  (1)   iconv_t   iconv_open(const   char   *tocode,   const   char   *fromcode);  
  此函数说明将要进行哪两种编码的转换,tocode是目标编码,fromcode是原编码,该函数返回一个转换句柄,供以下两个函数使用。  
  (2)   size_t   iconv(iconv_t   cd,char   **inbuf,size_t   *inbytesleft,char   **outbuf,size_t   *outbytesleft);  
  此函数从inbuf中读取字符,转换后输出到outbuf中,inbytesleft用以记录还未转换的字符数,outbytesleft用以记录输出缓冲的剩余空间。   (3)   int   iconv_close(iconv_t   cd);  
  此函数用于关闭转换句柄,释放资源。  
  例子1:   用C语言实现的转换示例程序  
    
  /*   f.c   :   代码转换示例C程序   */  
  #include   <iconv.h>  
  #define   OUTLEN   255  
  main()  
  {  
  char   *in_utf8   =   "姝e?ㄥ??瑁?";  
  char   *in_gb2312   =   "正在安装";  
  char   out[OUTLEN];  
    
  //unicode码转为gb2312码  
  rc   =   u2g(in_utf8,strlen(in_utf8),out,OUTLEN);  
  printf("unicode-->gb2312   out=%sn",out);  
  //gb2312码转为unicode码  
  rc   =   g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN);  
  printf("gb2312-->unicode   out=%sn",out);  
  }  
  //代码转换:从一种编码转为另一种编码  
  int   code_convert(char   *from_charset,char   *to_charset,char   *inbuf,int   inlen,char   *outbuf,int   outlen)  
  {  
  iconv_t   cd;  
  int   rc;  
  char   **pin   =   &inbuf;  
  char   **pout   =   &outbuf;  
    
  cd   =   iconv_open(to_charset,from_charset);  
  if   (cd==0)   return   -1;  
  memset(outbuf,0,outlen);  
  if   (iconv(cd,pin,&inlen,pout,&outlen)==-1)   return   -1;  
  iconv_close(cd);  
  return   0;  
  }  
  //UNICODE码转为GB2312码  
  int   u2g(char   *inbuf,int   inlen,char   *outbuf,int   outlen)  
  {  
  return   code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);  
  }  
  //GB2312码转为UNICODE码  
  int   g2u(char   *inbuf,size_t   inlen,char   *outbuf,size_t   outlen)  
  {  
  return   code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);  
  }  
    
  例子2:   用C++语言实现的转换示例程序  
    
  /*   f.cpp   :   代码转换示例C++程序   */  
  #include   <iconv.h>  
  #include   <iostream>  
    
  #define   OUTLEN   255  
    
  using   namespace   std;  
    
  //   代码转换操作类  
  class   CodeConverter   {  
  private:  
  iconv_t   cd;  
  public:  
  //   构造  
  CodeConverter(const   char   *from_charset,const   char   *to_charset)   {  
  cd   =   iconv_open(to_charset,from_charset);  
  }  
    
  //   析构  
  ~CodeConverter()   {  
  iconv_close(cd);  
  }  
    
  //   转换输出  
  int   convert(char   *inbuf,int   inlen,char   *outbuf,int   outlen)   {  
  char   **pin   =   &inbuf;  
  char   **pout   =   &outbuf;  
    
  memset(outbuf,0,outlen);  
  return   iconv(cd,pin,(size_t   *)&inlen,pout,(size_t   *)&outlen);  
  }  
  };  
    
  int   main(int   argc,   char   **argv)  
  {  
  char   *in_utf8   =   "姝e?ㄥ??瑁?";  
  char   *in_gb2312   =   "正在安装";  
  char   out[OUTLEN];  
    
  //   utf-8-->gb2312  
  CodeConverter   cc   =   CodeConverter("utf-8","gb2312");  
  cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);  
  cout   <<   "utf-8-->gb2312   in="   <<   in_utf8   <<   ",out="   <<   out   <<   endl;  
    
  //   gb2312-->utf-8  
  CodeConverter   cc2   =   CodeConverter("gb2312","utf-8");  
  cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);  
  cout   <<   "gb2312-->utf-8   in="   <<   in_gb2312   <<   ",out="   <<   out   <<   endl;  
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值