zoukankan      html  css  js  c++  java
  • 关于编码转换

    一、安装

    去 http://www.gnu.org/software/libiconv/ 上面下载 iconv

    然后按照网页上的说明安装就行,注意一定要用那个--prefix=/usr/local的参数,这样才能保证使用刚安装的这个iconv.h,而不是系统自带的

    安装完了还要弄个文件链接:ln -sf /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2

    否则使用iconv命令时会提示说没有共享链接库 libiconv.so.2

    二、编程注意

    注意编译的时候要加命令 -liconv,如果用IDE要到IDE设置里面加上

    汗,今天(2011年10月27日),用Ubuntu11.10 64位编写程序,发现加入-liconv 竟然还是 undefined reference to libiconv_open

    我就受不了了,搞了一整天,发现实因为NetBeans把 -liconv 这个参数加到了 g++ 紧随其后,而我自己写g++编译命令时把-liconv写在最后面竟然能够编译通过!

    无奈,最后只能在项目配置,链接器里面附加一个库了,在链接器里加上 /usr/local/lib/libiconv.so就行了

    另外一种弄法:

    选择 项目配置->定制->链接器->库,然后选择“添加库”,直接填写 iconv,-l 这个参数是自动加的

    三、Linux编码知识

    在Linux上wchar_t一般以UCS-4标准

    UCS-4-INTERNAL ,UCS-2-INTERNAL  会根据本机的存储方式(大端、小端)进行处理。

    还有UCS-2LE和UCS-2BE 分别代表小端和大端模式。

    Unicode(UCS) 有两套编码集,UCS-2 和 UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节。

    Windows 的内部其实是用的 UCS-2 标准,并用 UTF-16 来实现。而非 Windows 系统大多采用了 UTF-8 实现。

    在windows上wchar_t是2个字节表示,而在Linux上wchar_t是4个字节表示的。这样写跨平台的程序时,就会不统一。

    UTF编码简介:

    UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

    UCS-2编码(16进制) UTF-8 字节流(二进制) 

    0000 - 007F 0xxxxxxx 

    0080 - 07FF 110xxxxx 10xxxxxx 

    0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 

    例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

    UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

    总结一下:

    Windows里的wchar_t,也就是所谓的unicode的叫法,其实是UCS-2,也就是UTF-16,这种编码“A”的话是两字节, 00 38

    而ASCII  GB2312  GBK  GB18030是一样东西,里面的“A”就只有一个字节 38,而中文有两个字节,高字节的最高位是1,低字节最高位有可能不是1

    UTF-8就是3字节

    而UCS-4是4字节,是linux里面的wchar_t

  • 相关阅读:
    C++结构体成员列表初始化
    hdu-3790-最短路径问题(Dijkstra)
    hdu--1878--欧拉回路(并查集判断连通,欧拉回路模板题)
    nyoj-1278-Prototypes analyze(二叉排序树模板)
    hdu-5183-Negative and Positive (NP)(hash模板)
    nyoj-130-相同的雪花(hash)
    详细介绍C++STL:unordered_map
    NYOJ-626-intersection set(二分查找)
    hdoj-2141-Can you find it?(二分查找)
    HDU-1232-畅通工程(并查集)
  • 原文地址:https://www.cnblogs.com/xlhblog/p/2216683.html
Copyright © 2011-2022 走看看