怎么样把一个字符串转成UTF-16格式的..(50分)

  • 主题发起人 主题发起人 hansion3406
  • 开始时间 开始时间
H

hansion3406

Unregistered / Unconfirmed
GUEST, unregistred user!
我一定要UTF-16格式的...
因为对家是JAVA的..它过来的都是这个鬼格式..
 
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来表示。
 
好像没有解决问题...我想知道系统有没有支持..现成的函数..我不想现在自已写..
 
xdom单元的函数
function UTF8ToUTF16BEStr(const s: string): wideString;
// Converts an UTF-8 string into an UTF-16 wideString.
// No special conversions (e.g. on line breaks) and
// no XML-char checking are done.
// - This function was provided by Ernst van der Pols -
// - and slightly modified by Dieter K鰄ler -
结合AnsiToUtf8函数应该可以的吧
 
有这东西?

我看看去..
 
接受答案了.
 
后退
顶部