Delphi的System单元里面有
AnsiToUtf8()
Utf8ToAnsi();
的源代码,你可以参考一下
资料:
常用的Unicode编码方式有两种:UTF-8以及UTF-16。
UTF-8 是一种不等幅的编码方式,UTF-8编码的字节长度取决于所要编码的字符
在ISO 10646中的编码值。在UTF-8中,不同的字符,可能需要1-6个字节来进行
编码。对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行
编码(等同于ASCII码)。对于多字节的UTF-8编码,如果编码包含n个字节,那
么第一个字节的前n位为1,第一个字节的第n+1位为0,该字节的剩余各位用来
对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其
余6位用来对字符进行编码。
UTF-16也是Unicode的变形表示方式的一种。它的目的是维持双八位的编码方式,
同时也用一些特殊的双八位来表示ISO 10646中非基本多文种平面(BMP)中的一
些字符。这种用来表示非BMP字符的方法在Unicode中称作代理对机制。
代理对的编码机制以及原先不需要代理对的六万三千多个基本 Unicode 码,合起
来叫做UTF-16。也就是说UTF-16 基本上就是 Unicode双字节编码的实现,再加上
一个应付未来扩充需要的编码机制。
UTF-16编码遵循下述原则:
对于字符编码值小于0x10000的字符,则直接把编码值转化为一个相等的16位整数。
对于字符编码值在0x10000到0x10FFFF之间的字符,将用一个0xD800到0xDBFF(代
理高部)之间的16位数,后面紧跟一个0xDC00到0xDFFF(代理低部)之间的16位
数来表示。
字符编码值大于0x10FFFF的字符将不能用UTF-16来表示。