當前位置:首頁 » 編程語言 » c語言utf8字元串
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言utf8字元串

發布時間: 2022-08-24 01:47:46

c語言如何生成UTF-8編碼格式的文件

下面的Unix下函數可以會幫到你

getenv(取得環境變數內容)
相關函數 putenv,setenv,unsetenv
表頭文件 #include<stdlib.h>
定義函數 char * getenv(const char *name);
函數說明 getenv()用來取得參數name環境變數的內容。參數name為環境變數的名稱,如果該變數存在則會返回指向該內容的指針。環境變數的格式為name=value。
返回值 執行成功則返回指向該內容的指針,找不到符合的環境變數名稱則返回NULL。
範例 #include<stdlib.h>
mian()
{
char *p;
if((p = getenv(「USER」)))
printf(「USER=%s\n」,p);
}

執行 USER = root

putenv(改變或增加環境變數)
相關函數 getenv,setenv,unsetenv
表頭文件 #include4<stdlib.h>
定義函數 int putenv(const char * string);
函數說明 putenv()用來改變或增加環境變數的內容。參數string的格式為name=value,如果該環境變數原先存在,則變數內容會依參數string改變,否則此參數內容會成為新的環境變數。
返回值 執行成功則返回0,有錯誤發生則返回-1。
錯誤代碼 ENOMEM 內存不足,無法配置新的環境變數空間。
範例 #include<stdlib.h>
main()
{
char *p;
if((p = getenv(「USER」)))
printf(「USER =%s\n」,p);
putenv(「USER=test」);
printf(「USER+5s\n」,getenv(「USER」));
}

執行 USER=root
USER=root

setenv(改變或增加環境變數)
相關函數 getenv,putenv,unsetenv
表頭文件 #include<stdlib.h>
定義函數 int setenv(const char *name,const char * value,int overwrite);
函數說明 setenv()用來改變或增加環境變數的內容。參數name為環境變數名稱字元串。
參數 value則為變數內容,參數overwrite用來決定是否要改變已存在的環境變數。如果overwrite不為0,而該環境變數原已有內容,則原內容會被改為參數value所指的變數內容。如果overwrite為0,且該環境變數已有內容,則參數value會被忽略。
返回值 執行成功則返回0,有錯誤發生時返回-1。
錯誤代碼 ENOMEM 內存不足,無法配置新的環境變數空間
範例 #include<stdlib.h>
main()
{
char * p;
if((p=getenv(「USER」)))
printf(「USER =%s\n」,p);
setenv(「USER」,」test」,1);
printf(「USER=%s\n」,getenv(「USEr」));
unsetenv(「USER」);
printf(「USER=%s\n」,getenv(「USER」));
}

執行 USER = root
USER = test
USER = (null)

㈡ C語言下實現對字元串進行utf-8格式的轉換

標准庫里沒有。但搜了一下網上應該找到不少,比如這個:

std::stringiso_8859_1_to_utf8(std::string&str)
{
stringstrOut;
for(std::string::iteratorit=str.begin();it!=str.end();++it)
{
uint8_tch=*it;
if(ch<0x80){
strOut.push_back(ch);
}
else{
strOut.push_back(0xc0|ch>>6);
strOut.push_back(0x80|(ch&0x3f));
}
}
returnstrOut;
}

http://stackoverflow.com/questions/4059775/convert-iso-8859-1-strings-to-utf-8-in-c-c

㈢ 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;

}

(3)c語言utf8字元串擴展閱讀

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位元組的符號(n>1),第一個位元組的前n位都設為1,第n+1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。

㈣ C語言讀取UTF-8文本

UTF-8是一種多位元組編碼字元集,Unicode字元,也可以是一個位元組,符號:

1個位元組:0XXXXXXX
2個位元組:110XXXXX 10XXXXXX /> 3個位元組: 1110XXXX 10XXXXXX 10XXXXXX
4個位元組:11110xxx 10XXXXXX 10XXXXXX 10XXXXXX

本文根據上面的字元串遍歷的特點來確定一個字元串是否是UTF-8編碼。應當注意的是,每個位元組的UTF-8字元串的值具有一定的范圍,而不是所有的值?是有效的UTF-8字元,但在一般應用足夠長的字元串判斷的情況下,更准確,是實現比較簡單。具體的位元組范圍,可以發現在這本書的「Unicode解釋」6.4.3。
布爾IsUTF8(const void *的pbuffer的,長尺寸)
{
布爾IsUTF8 = TRUE;
unsigned char型*開始=(無符號字元*)pbuffer的/無符號的char *結束=(unsigned char型)pbuffer的+大小;
(起點和終點)
{
(*開始<0X80)/ /(10000000):值小於0x80的ASCII的字元
{
開始+ +;
}
否則,如果(*啟動<(0XC0))/ /(11000000):值嗎? 0XC0之間的范圍0x80無效的UTF-8字元
{
IsUTF8 = FALSE;
突破;
}
否則,如果(*開始(0XE0))/在2個位元組的UTF-8字元/(11100000):
{
(開始> =結束 - 1)
突破;
((開始[1](0XC0) )= 80H時)
{
IsUTF8 = FALSE;
突破;
}
開始+ = 2;
}
否則,如果(*啟動<(31:8))/ /(11110000):結束的3個位元組的UTF-8字元
{
(「開始」> = - 2)
突破;。 .. />((開始[1](為0xC0))= 0x80的| |(啟動[2](為0xC0))= 80H時)
{
IsUTF8 = FALSE;
休息
}
開始+ = 3;
}

{
IsUTF8 = FALSE;
突破;
}
}
回報IsUTF8;
}

UTF-UCS編碼的16至16個單位。小於0x10000的UCS碼,UTF-16編碼是等於相應的UCS代碼的16位無符號整數。對於不小於0x10000的UCS碼,定義了一個演算法。然而,實際使用的UCS2,或者UCS4的BMP必然小於0x10000,所以現在你可以認為UTF -16和UCS-2基本相同。 UCS-2是一種編碼方案,UTF-16已被用於實際的傳輸,所以我們要考慮的位元組順序。

㈤ 弱弱的問一句,C語言能不能實現字元串的編碼格式轉換 GB2312toUTF-8

其實 linux 和 windows 的系統函數都是C函數,並且提供了GB2312toUTF-8的函數,所以C語言是可以實現轉碼的。以下是windows的例子:int num = ::MultiByteToWideChar(CP_ACP, 0, "你好", -1, NULL, 0);wchar_t* m_arrayShort = new wchar_t[num];::MultiByteToWideChar(CP_ACP, 0, "你好", -1, m_arrayShort, num); int len = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, 0, 0, NULL, NULL);char *tmpPT = new char[len+1];::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, tmpPT, len, NULL, NULL);tmpPT[len] = 0;

㈥ c/c++如何直接定義utf8類型的字元串

文件格式是utf8,字元編碼自然是utf8。不需要直接定義。也不應該直接定義。
標准庫沒有UTF8的類。也沒有三方庫提供這個無聊的東西。字元集轉換GNU有icov庫。

㈦ 如何在c語言中操作UTF-8字元

那你就去了解一下 UTF-8 的編碼規則啊,
簡單來說讀取某個位元組, 判斷它是多位元組的還是單位元組的,甚至是多位元組的非首位元組...
如果怕是一些標點符號,再把這些標點符號的判斷值加進去 。

㈧ 如何使用C語言將漢字轉換成UTF8編碼,如將「你好」轉成:%E4%BD%A0%E5%A5%

char a[]="北京" 這時系統在串的後面加'/0' 每個漢字2位元組 所以2*2+1=5

㈨ 怎麼把C語言平台設置為utf-8教程

為fopen指定一個編碼,然後寫入wchar_t字元串,最終寫入的文件就是UTF-8編碼。