utf16转utf8源码(utf16编码转换中文)
本文目录一览:
utf-8编码转utf-16编码的算法是?
比如一个三字节的UTF8编码为:
1110ABCD 10EFGHIJ 10KLMNOP
那么它对应的UTF16编码就是:
ABCDEFGH IJKLMNOP
其实你的那个例子反着写就是UTF8变换UTF16的例子:
11100110 10110001 10001001 = E6 B1 89
变换回UTF16就是
01101100 01001001 = 6C 49
求:C语言utf8转utf16详细源码和教程
哈哈,选我吧!运气不错,不就前做过这个,不过是C++的稍微改了一下,给你看能不能用
请先阅读一下给你的参考网址
-------------------------------------------------------------------------------------------
voidUtf162UTF8(constwchat_tszIn[],intnSourceLen,charszOut[])
{
unsignedcharfirstchar=0;//临时变量存储3字节utf-8编码的三个字节中的一个
unsignedcharsecondchar=0;//同上
unsignedcharthirdchar=0;//同上
wchat_tvalue=0;
intindex=0;//将转换过的字符存入szOut的索引
for(inti=0;i=0x0080(unsignedchar)szIn[i]6)0xef)|0xc0;
secondchar=(value0x3f)|0x80;
szOut[index++]=firstchar;
szOut[index++]=secondchar;
}
//同两字节utf-8编码这里进行的操作即为将后面的[1110xxxx10xxxxxx10xxxxxx]中的16位x分别取出来然后组成一个16位的数,既为utf-16编码
elseif((unsignedchar)szIn[i]=0x0800(unsignedchar)szIn[i]12)|0xe0;
secondchar=((value6)0x3f)|0x80;
thirdchar=(value0x3f)|0x80;
szOut[index++]=firstchar;
szOut[index++]=secondchar;
szOut[index++]=thirdchar;
}
}
}
--------------------------------------------------------------------------------------------------
voidUTF82utf16(constchar*szIn,wchat_tszOut[])
{
wchar_tvalue=0;//
unsignedcharfirstchar=0;//临时变量存储3字节utf-8编码的三个字节中的一个
unsignedcharsecondchar=0;//临时变量存储3字节utf-8编码的三个字节中的一个
unsignedcharthirdchar=0;//临时变量存储3字节utf-8编码的三个字节中的一个
intindex=0;
for(unsignedinti=0;i=127//若字符不是普通字符则对齐进行解码,
(unsignedchar)szIn[i+1]=127//判断后面的2个字符是否也不是普通字符若都不是则为3字节utf-8编码
(unsignedchar)szIn[i+2]=127)//此过程为上面编码过程的逆过程
{
firstchar=szIn[i];
secondchar=szIn[i+1];
thirdchar=szIn[i+2];
value=(firstchar0x1f)=127
(unsignedchar)szIn[i+1]=127)
{
firstchar=szIn[i];
secondchar=szIn[i+1];
value=(firstchar0x1f)6;brvalue|=(secondchar0x3f)
szOut[index++]=value;
i+=2;
}
else
{
szOut[index++]=value;
++i;
}
}
}
代码写得不好,见谅
有问题Email:jarvisvictory@gmail.com
两个字符的utf-16怎么转utf-8-CSDN论坛
先转 UTF32, 再正常转 UTF8, UTF8 最好还是只支持到 U+10FFFF, 不然有些字符在 UTF16 下无法表示...
c1 = read_UTF16();
if(c1 = 0xD800 c1 = 0xDFFF)
{ /* Surrogate Area */
if(c1 = 0xDC00)
return invalid .......
c2 = read_UTF16();
if(0 == c2)
return wouldblock.... or invalid ....
if(c2 0xDC00 || c2 0xDFFF)
return invalid .......
ucs4_ch = (c2 0x03FF) + (((c1 0x03FF) + 0x40) 10);
}