㈠ 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編碼。