本文目錄一覽:
- 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);//直接顯示為“珠海”不需要轉換。
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/247390.html