https://stackoverflow.com/questions/496321/utf-8-utf-16-and-utf-32

首先要明白一点,这三种编码方式都是存储的一样的unicode编码值,只是由于这个unicode太大了,为了适应网络传输, 减少带宽损耗,才出现了多种unicode的存储方式

  1. UTF-8:
    • 变长编码
    • ascii码编码的部分占用1字节,且编码与ascii兼容。 编码在U+0080 到 U+07FF 之间的占用2字节, 编码在U+0800 到 U+FFFF 之间的占用3字节, 编码在U+10000 到 U+10FFFF 之间占用4字节.
    • 适合英语系,亚洲语系需要3-4字节。 由于不等长,不方便处理,一般用于网络传输,程序内部较少使用.
  2. UTF-16:
    • 变长编码.
    • 编码在U+0000 到 U+FFFF 的部分占用2字节, 编码在U+10000 到 U+10FFFF 的部分占用4字节. ascii码也需要2字节。
    • 优点是平衡了内存占用和操作复杂度,很多软件,包括qt, java, win内部都使用utf16做字符串处理
  3. UTF-32:
    • 定长编码。
    • 所有的unicode都用4字节表示, 最浪费空间,即使一个ascii码也需要四个字节来存储。
    • 由于每个字符都是4字节,非常方便进行字符串操作等。