Unicode是Unicode.org制定的编码标准,目前得到了绝大部分操作系统和编程语言的支持。Unicode.org官方对Unicode的定义是:Unicode provides a unique number for every character。可见,Unicode所做的是为每个字符定义了一个相应的数字表示。比如,“a“的Unicode值是0x0061,“一”的Unicde值是0x4E00,这是最简单的情况,每个字符用2个字节表示。
Unicode.org定义了百万个以上的字符,如果将所有的字符用统一的格式表示,需要的是4个字节。“a“的Unicode表示就会变成0x00000061,而“一“的Unicode值是0x00004E00。实际上,这就是UTF32,Linux操作系统上所使用的Unicode方案。
但是,仔细分析可以发现,其实绝大部分字符只使用2个字节就可以表示了。英文的Unicode范围是0x0000-0x007F,中文的Unicode范围是0x4E00-0x9F**,真正需要扩展到4个字节来表示的字符少之又少,所以有些系统直接使用2个字节来表示Unicode。比如Windows系统上,Unicode就是两个字节的。对于那些需要4个字节才能表示的字符,使用一种代理的手法来扩展(其实就是在低两个字节上做一个标记,表示这是一个代理,需要连接上随后的两个字节,才能组成一个字符)。这样的好处是大量的节约了存取空间,也提高了处理的速度。这种Unicode表示方法就是UTF16。一般在Windows平台上,提到Unicode,那就是指UTF16了。
至于UTF16-LE和UTF16-BE,与计算机的CPU构架有关。LE指Little Endian,而BE指Big Endian。关于这方面的信息,网上有很多相关的帖子。我们一般的X86系统都是Little Endian的,可以认为UTF16=UTF16-LE.
由于对于欧洲和北美,实际上使用的编码范围在0x0000-0x00FF之间,只需要一个字符就可以表示所有的字符。即使是使用UTF16来作为内存的存取方式,还是会带来巨大的空间浪费,因此就有了UTF8的编码方式。这是一种很灵活的编码,对于只需要1个字节的字符,就使用一个字节,对于中日韩等原本需要两个字节才能表示的字符,则通过一个UTF16-UTF8的算法实现相互之间的转换(一般需要3个字节才能表示),而对于需要4个字节才能表示的字符,UTF8可以扩展到6个字节每个字符。UTF8使用的算法很有意思,大致映射关系如下:
UTF-32 UTF8
0x00000000 - 0x0000007F 0xxxxxxx
0x00000080 - 0x000007FF 110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 - 0x7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
可以发现这和IP的分址算法很是相像。
由于UTF8可以方便的转换为UTF16和UTF32(不需要码表,转换算法可以在Unicode.org上找到C代码)。而且UTF8在每个操作系统平台上的实现都是一样的,也不存在跨平台的问题,所以UTF8成为跨平台的Unicode很好的解决方案。当然,对于中文来说,由于每个字符需要3个字节才能表示,还是有点浪费的。
【转载地址】http://blog.csdn.net/dengyunze/article/details/160958
【参考地址】http://vivizhyy.iteye.com/blog/1535760
分享到:
相关推荐
Windows系统提供了API函数来进行Unicode转换,如`MultiByteToWideChar`和`WideCharToMultiByte`,这些函数分别用于将多字节字符串(如UTF-8)转换为宽字节字符串(如UTF-16LE),反之亦然。但在跨平台的项目中,我们...
最近需要对Linux与Windows平台下的字符传输出现乱码,对...参考了网上的UTF-8/UTF-16转换的资料,只有0x10000以下的Unicode编码进行了转换;对其代码进行了修改和补充,可以实现所有的UTF-8/UTF-16的转换,分享给大家。
UTF-16BE UTF16LE UTF-16LE UTF32 UTF-32 UTF32BE UTF-32BE UTF32LE UTF-32LE UCS2 UCS-2 UCS-2LE UCS-2BE UCS-2-INTERNAL UCS4 UCS-4 UCS-4LE UCS-4BE UCS-4-INTERNAL SDL_iconv.c是一部分。 ...
本主题主要关注UTF8和UTF16LE两种不同的字符编码格式之间的转换,特别是如何进行无BOM(字节顺序标记)的处理。下面我们将深入探讨这两种编码方式以及它们在实际应用中的转换。 首先,UTF8是一种广泛使用的变长...
读取ANSI 明码文件 读取Unicode 明码文件 读取Unicode big endian 明码文件 读取UTF-8 明码文件 读取UTF8 Bom 明码文件 读取UTF16-LE 明码文件 读取UTF16-BE 明码文件 到多字节字符串 扩展类CFilePlainCode
CodeDetectorDetect File encoding, Now support UTF-8,GBK,UTF-16LE,UTF-16BE, Java检查文件编码,主要针对中文文本。目前支持 UTF-8(BOM或无BOM)、GBK、UTF-16LE、UTF-16BE单个文件或文件夹,支持编码批量转换。...
以UTF=16LE编码方式保存或读取文件,可以结合博客“c++ 以UTF-16LE编码方式保存文件”查看辅助理解
总之,“pb12 gb转utf-8”是一个关于使用PowerBuilder 12将GBK编码的数据转换为UTF-8编码的过程,这在处理多语言环境或者跨平台应用时尤其重要。理解和掌握这种转换技巧对于确保数据的正确性和兼容性是至关重要的。
change file encoding in batches, now support UTF-8,GBK,UTF-16LE,UTF-16BE, Java java -Dfile.encoding=utf-8 -mx1000m -jar ChangeEncoding-1.0.jar inputPath outPath in_encoding out_encoding in_encoding 是...
Qt打开文本时自动检测文件编码并正确解析文件,通过检测文件头标志判断UTF-8、UTF-16LE/BE、GBK等格式,确保文本数据的正确读取。 自己定义个Skysonya类,可以检测文件编码格式,同时定义了文件打开和保存函数,附带...
首先,需要了解UTF-8和UTF-16LE这两种编码格式。UTF-8是一种变长编码格式,使用1到4个字节来表示一个字符。UTF-16LE是一种定长编码格式,每个字符使用2个字节来表示。Excel 2007以上版本可以识别UTF-16LE编码格式的...
请注意,实际的编码转换过程需要考虑到字节顺序标记(BOM),因为UTF-16有LE(小端)和BE(大端)两种字节顺序。 在处理这些编码转换时,需要注意字符编码的正确性和一致性,避免乱码问题。同时,由于不同的系统和...
我们将以一个具体的例子来说明,即如何将TXT文件从UTF-16LE编码转换为UTF-8编码。 首先,我们要导入必要的库。`os`库用于操作文件和目录,而`chardet`库则用于检测文件的编码类型。以下是一个简单的Python脚本,...
文档提到了MIME字符集命名,并包含了三个MIME字符集参数值的注册:UTF-16BE(大端序)、UTF-16LE(小端序)和UTF-16。 根据互联网工程任务组(IETF)关于字符集和语言的政策[CHARPOLICY],IETF协议必须能够使用UTF-...
首先,我们需要检查数据是否以UTF16LE(小端序)或UTF16BE(大端序)编码。大多数现代系统使用UTF16LE,但最好能适应两者。 3. **转换为UTF16字符串**: Delphi中的`AnsiString`、`WideString`和`UnicodeString`...
`Utf8ToUnicode.exe` 是一个用于将UTF-8格式的文本文件转换为Unicode(通常是UTF-16LE,小端字节序)的命令行工具。其用法非常简单:`Utf8ToUnicode.exe 源文件名 目标文件名`。在这个命令中,`源文件名`是你想要...
一个LRC(标准歌词)、TRC(天天动听歌词)、KRC(酷狗音乐歌词)之间相互转换的工具,自动识别ANSI、UTF-8-BOM、UTF-8-NOBOM、UTF-16LE-BOM、UTF16BE-BOM编码,同时可保存为ANSI、UTF-8-BOM、UTF-8-NOBOM、UTF-16LE...
处理UTF-8,UTF-16BE,UTF-16LE; (可选)将DOS或Windows代码页或HP-Roman8中的常用字符转换为ISO-8859-1。 UCS字符可以映射到8位转换字符串。 单个ISO C源文件“ 8conv.c”。 可以通过配置文件控制翻译,示例文件...
功能介绍 在文本字元编码之间进行转换(包括UTF-8,没有bom标记的UTF-8,UTF-16le,UTF-16be,UTF-32le,UTF-32be,中文简体GBK,中文繁体BIG5,日文 shift-JIS, 日文 euc-jp, 韩文 euc-kr等, 请参照支援的
一些文件是uff16格式,虽然也是文本类型文件,但读取总是出现乱码,因此写了一个程序,可实现对UTF16编码的文件转换为utf8编码文件,请大家下载之前查清楚自己遇到的文件是否是utf16格式的.否则无效哦.使用方法请打开脚本...