【java基础之字符问题】UTF-8和GBK的区别与联系

基础概念:

1 字符集
字符集就是编码的集合,例如unicode、GBK、GB2312等都属于字符集。

2 编码
编码就是字符的表现形式,例如unicode字符集就能够用UTF-8、UTF-16UTF-32编码。

GBK与UTF-8转换的核心问题分析。
GBK是一种字符集,而UTF-8是一种编码,因此通常我们研究的GBK与UTF-8的转换问题,其实就是GBK与Unicode字符集的转化问题,由于GBK和Unicode的字符(主要讨论汉字字符)之间没有必然的联系,因此通常是采用查表的方法来实现GBK和Unicode之间的转化。在完成GBK与Unicode编码的转化后,剩下的工作就是如何把Unicode以UTF-8的形式表现出来了。

搞清楚编码问题,接下来要做的就是如何进行编码转换?在linux平台下,有iconv()函数可供使用,那么在Windows平台下该如何处理呢?其实处理的方法有很多,如Windows API / IBM ICU4C 等,作者推荐使用windows平台下的iconv()函数,因为相对于使用Windows API,iconv库可以方便的跨平台;而相对于IBM公司的ICU4C, iconv库要小很多。

下面给出几个windows下 iconv库的链接:
(1) MinGW使用的编译好的库,能够直接使用。
      http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.14-2/

(2) GNU开源源代码,需要之间编译成相应的动态库或者是静态库。
      http://www.gnu.org/software/libiconv/
      这个iconv源代码需要自己编译。下面给出在Windows下使用MinGW和MSYS编译的过程。
       (a) 安装autoconf工具
         (b)   依次执行下列命令(编译为静态库)
                  ./configure --prefix=/home --enable-static --disable-shared
                   make
                   make install
                   那么编译后,在/home目录中就会看到编译后的输出。

猜你喜欢

转载自my.oschina.net/maojindaoGG/blog/1795615