c語言utf8轉漢字,如何把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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:23
下一篇 2024-12-12 13:23

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • c# enum轉換成string

    本文將從以下幾個方面詳細闡述c#中enum類型轉換成string類型的方法及注意事項。 一、基本語法和示例 c#中的enum類型可以看作是一組有名字的常量值,通常用於定義一組相關的…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • 進擊的漢字拆字窗

    進擊的漢字拆字窗是一款非常有用的中文工具,它可以幫助人們更好的學習漢字,了解漢字的含義,以及更好的了解漢字在中文中的運用和意義。 一、功能介紹 進擊的漢字拆字窗主要有以下幾個功能:…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28

發表回復

登錄後才能評論