本文目录一览:
- 1、怎么UTF-8编码转化为汉字?例如将\u5c0f\u867e\u7c73转化为汉字“小虾米”。C语言怎么写?或者c++
- 2、关于UTF-8编码转换为汉字的
- 3、C#如何将UTF8的编码转回汉字?
- 4、c语言怎么把UTF-8转换成Unicode
- 5、在C#中如何将将utf8的一段代码转化成中文。
怎么UTF-8编码转化为汉字?例如将\u5c0f\u867e\u7c73转化为汉字“小虾米”。C语言怎么写?或者c++
windows的话直接调api吧
MultiByteToWideChar
WideCharToMultiByte
前者可以把utf8转成宽字符,后者把宽字符转成多字节(比如gb2312)
参数细节查看msdn
关于UTF-8编码转换为汉字的
UTF-8变成压缩编码的,转换起来比较复杂.
我写过一个函数,可以实现这个功能:
CString UTF8toUnicode(char* s)
{
int len = 0;
WCHAR* r = new WCHAR[strlen(s) * 2];
while(s[0])
{
int bytes = 1;
if(s[0] 0x80)
while(s[0] (0x80 bytes)) bytes++;
if(bytes == 1)
r[len] = s[0];
else
{
r[len] = 0;
for(char*p = s + (bytes - 1); p s; p--)
r[len] |= ((*p) 0x3F) ((bytes - (p - s) - 1) * 6);
r[len] |= (s[0] ((1 (7 - bytes)) - 1)) ((bytes - 1) * 6);
}
len++;
s += bytes;
}
r[len] = 0;
char*buffer = new char[len * 2 + 1];
ZeroMemory(buffer, len * 2 + 1);
::WideCharToMultiByte(CP_ACP, NULL, r, len, buffer, 1+ 2 * len, NULL, NULL);
CString str = buffer;
Delete[] r;
delete[] buffer;
return str;
}
另外,如果要省事,直接用Windows自带的记事本另存为就能转了
C#如何将UTF8的编码转回汉字?
xxxx表示一个字符,xxxx是16进制表示这个字符在字符集的编号,只要把xxxx转换成十进制然后找到对应的字符就行了,代码如下:
using System.Text.RegularExpressions;
private void button1_Click(object sender, EventArgs e)
{
string sourceStr = File.ReadAllText("d:\\1.txt");
Regex regex = new Regex(@"\\u(\w{4})");
string result = regex.Replace(sourceStr, delegate(Match m)
{
string hexStr = m.Groups[1].Value;
string charStr = ((char)int.Parse(hexStr, System.Globalization.NumberStyles.HexNumber)).ToString();
return charStr;
});
MessageBox.Show(result);
string test = "\u73e0\u6d77";//如果直接在字符串上赋值为十六进制的字符,程序在编译的时候会自己编译为对应的字符。
MessageBox.Show(test);//直接显示为“汉字”不需要转换。
}
c语言怎么把UTF-8转换成Unicode
下面程序给出的是UTF-8转成Unicode(UCS-2)的函数:
#include stdio.h
#include stdlib.h
#include memory.h
#include string.h
int utf8_to_unicode(char* pInput, char** ppOutput)
{
int outputSize = 0; //记录转换后的Unicode字符串的字节数
*ppOutput = (char *)malloc(strlen(pInput) * 2); //为输出字符串分配足够大的内存空
memset(*ppOutput, 0, strlen(pInput) * 2);
char *tmp = *ppOutput; //临时变量,用于遍历输出字符串
while (*pInput)
{
if (*pInput 0x00 *pInput = 0x7F) //处理单字节UTF8字符(英文字母、数字)
{
*tmp = *pInput;
tmp++;
*tmp = 0; //小端法表示,在高地址填补0
}
else if (((*pInput) 0xE0) == 0xC0) //处理双字节UTF8字符
{
char high = *pInput;
pInput++;
char low = *pInput;
if ((low 0xC0) != 0x80) //检查是否为合法的UTF8字符表示
{
return -1; //如果不是则报错
}
*tmp = (high 6) + (low 0x3F);
tmp++;
*tmp = (high 2) 0x07;
}
else if (((*pInput) 0xF0) == 0xE0) //处理三字节UTF8字符
{
char high = *pInput;
pInput++;
char middle = *pInput;
pInput++;
char low = *pInput;
if (((middle 0xC0) != 0x80) || ((low 0xC0) != 0x80))
{
return -1;
}
*tmp = (middle 6) + (low 0x7F);
tmp++;
*tmp = (high 4) + ((middle 2) 0x0F);
}
else //对于其他字节数的UTF8字符不进行处理
{
return -1;
}
pInput ++;
tmp ++;
outputSize += 2;
}
*tmp = 0;
tmp++;
*tmp = 0;
return outputSize;
}
扩展资料
UTF-8:互联网的普及, 强烈要求出现一种统一的编码方式。 UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~6个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则:
UTF-8的编码规则很简单,只有两条:
1、对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2、对于n字节的符号(n1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
在C#中如何将将utf8的一段代码转化成中文。
\uxxxx表示一个字符,xxxx是16进制表示这个字符在字符集的编号,你只要把xxxx转换成十进制然后找到对应的字符就行了。
代码如下:
using System.Text.RegularExpressions;
private void button1_Click(object sender, EventArgs e)
{
string sourceStr = File.ReadAllText("d:\\1.txt");
Regex regex = new Regex(@"\\u(\w{4})");
string result = regex.Replace(sourceStr, delegate(Match m)
{
string hexStr = m.Groups[1].Value;
string charStr = ((char)int.Parse(hexStr, System.Globalization.NumberStyles.HexNumber)).ToString();
return charStr;
});
MessageBox.Show(result);
string test = "\u73e0\u6d77";//如果直接在字符串上赋值为十六进制的字符,程序在编译的时候会自己编译为对应的字符。
MessageBox.Show(test);//直接显示为“珠海”不需要转换。
}